undefined
Глобальна властивість undefined (невизначене) представляє примітивне значення undefined. Це один з примітивних типів JavaScript.
Спробуйте його в дії
Значення
Примітивне значення undefined.
Атрибути властивості undefined |
|
|---|---|
| Записна | ні |
| Перелічувана | ні |
| Налаштовна | ні |
Опис
undefined – властивість глобального об'єкта. Тобто це змінна у глобальній області видимості.
У всіх незастарілих браузерах undefined є неналаштовною властивістю, недоступною для запису. Навіть тоді, коли це не так, слід уникати її перевизначення.
Змінна, котрій не було присвоєно значення, має тип undefined. Крім цього, метод чи інструкція повертає undefined, якщо обчислювана змінна не має присвоєного значення. Функція повертає undefined якщо не було повернено жодне значення.
Примітка: Хоч
undefinedможливо використати як ідентифікатор (ім'я змінної) у будь-якій області видимості, крім глобальної (аджеundefinedне є зарезервованим словом), та це дуже погана ідея, що зробить код складним у підтримці та зневадженні.// НЕ РОБІТЬ ТАК (() => { const undefined = "foo"; console.log(undefined, typeof undefined); // foo string })(); ((undefined) => { console.log(undefined, typeof undefined); // foo string })("foo");
Приклади
Сувора рівність і undefined
Можна використовувати undefined і оператори строгої рівності та нерівності, аби з'ясувати, чи має змінна значення. У наступному коді змінна x – не ініціалізована, й інструкція if обчислюється в істинність.
let x;
if (x === undefined) {
// ці інструкції виконуються
} else {
// ці інструкції не виконуються
}
Примітка: Тут повинен бути використаний оператор строгої рівності (а не оператор стандартної рівності), тому що
x == undefinedтакож перевіряє, чиxєnull, а строга рівність – ні. Це так, тому щоnullне рівносильноundefined.Дивіться подробиці на сторінці Перевірки рівності та тотожності.
Оператор typeof і undefined
Інший варіант – використати typeof:
let x;
if (typeof x === "undefined") {
// ці інструкції виконуються
}
Одна з причин використати typeof – те, що він не викидає помилку, коли змінна не оголошена.
// x тут не оголошена
// обчислюється в true без помилок
if (typeof x === "undefined") {
// ці інструкції виконуються
}
// Викидає ReferenceError
if (x === undefined) {
}
Проте є іще один варіант. JavaScript – мова статичних областей видимості, тож чи оголошена змінна – можна дізнатися, поглянувши, чи оголошена вона в охоплювальному контексті.
Глобальна область видимості прив'язана до глобального об'єкта, тож перевірка існування змінної в глобальному контексті може бути виконана шляхом перевірки існування властивості на глобальному об'єкті, за допомогою, наприклад, оператора in:
if ("x" in window) {
// Ці інструкції виконуються лише якщо x визначено глобально
}
Оператори void і undefined
Оператор void – третій варіант.
let x;
if (x === void 0) {
// ці інструкції виконуються
}
// y тут не оголошено
if (y === void 0) {
// викидає Uncaught ReferenceError: y is not defined
}
Специфікації
Сумісність із браузерами
| desktop | mobile | server | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
undefined
|
Chrome Full support 1 | Edge Full support 12 | Firefox Full support 1 | Internet Explorer Full support 5.5 | Opera Full support 3 | Safari Full support 1 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox for Android Full support 4 | Opera Android Full support 10.1 | Safari on iOS Full support 1 | Samsung Internet Full support 1.0 | Deno Full support 1.0 | Node.js Full support 0.10.0 |