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 |