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
Chrome Edge Firefox Internet Explorer Opera Safari WebView Android Chrome Android Firefox for Android Opera Android Safari on iOS Samsung Internet Deno Node.js
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

Дивіться також