Spec-Zone.ru › JavaScript

undefined

Baseline Широко доступно

Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна во всех браузерах с июля 2015 года.

Глобальное свойство undefined представляет примитивное значение undefined. Это один из примитивных типов JavaScript.

Попробуйте

function test(t) {
  if (t === undefined) {
    return "Undefined value!";
  }
  return t;
}

let x;

console.log(test(x));
// Expected output: "Undefined value!"

Значение

Примитивное значение undefined.

Атрибуты свойств undefined
Записываемый нет
Перечисляемый нет
Конфигурируемый нет

Описание

undefined — это свойство глобального объекта. То есть, это переменная в глобальной области видимости.

Во всех не устаревших браузерах undefined является неконфигурируемым, непереписываемым свойством. Даже если это не так, избегайте его переопределения.

Переменная, которой не было присвоено значение, имеет тип undefined. Функция возвращает undefined, если значение не было returned. Доступ к несуществующему свойству также возвращает undefined. Оператор void всегда возвращает undefined.

Примечание: Хотя вы можете использовать undefined в качестве идентификатора (имени переменной) в любой области видимости, кроме глобальной (поскольку undefined не является зарезервированным словом), делать это очень плохая идея, которая затруднит поддержку и отладку вашего кода.

```js example-bad // НЕ ДЕЛАЙТЕ ЭТОГО

(() => { const undefined = "foo"; console.log(undefined, typeof undefined); // foo string })();

((undefined) => { console.log(undefined, typeof undefined); // foo string })("foo"); ```

Примеры

Строгое равенство и undefined

Вы можете использовать undefined и операторы строгого равенства и неравенства для определения, имеет ли переменная значение. В следующем коде переменная x не инициализирована, и оператор if оценивается как true.

let x;
if (x === undefined) {
  // these statements execute
} else {
  // these statements do not execute
}

Примечание: Здесь необходимо использовать оператор строгого равенства (в отличие от оператора нестрогого равенства), потому что x == undefined также проверяет, является ли x null, тогда как строгое равенство этого не делает. Это связано с тем, что null не эквивалентно undefined.

См. Сравнение равенства и идентичности для получения подробной информации.

Оператор typeof и undefined

typeof также может определить, является ли переменная undefined:

let x;
if (typeof x === "undefined") {
  // these statements execute
}

Одна из причин использования typeof заключается в том, что он не вызывает ошибку, если переменная не существует в текущей области видимости.

// x has not been declared before
// evaluates to true without errors
if (typeof x === "undefined") {
  // these statements execute
}

// Throws a ReferenceError
if (x === undefined) {
}

Он также работает с переменными, объявленными с помощью var после проверки, поскольку объявление поднимается в начало области видимости со значением undefined.

if (typeof x === "undefined") {
  // these statements execute
}
var x = 1;

Этот метод обычно полезен только для тестирования глобальных переменных. Вы можете узнать, существует ли переменная в любой другой области видимости (блоки, функции, модули и т. д.), просто взглянув на исходный код. Глобальная область видимости связана с глобальным объектом, поэтому проверка существования переменной в глобальном контексте может быть выполнена путем проверки существования свойства в глобальном объекте, например, с помощью оператора in:

if ("x" in window) {
  // These statements execute only if x is defined globally
}

Однако ни один из вышеперечисленных методов не работает, если переменная объявлена с помощью let, const или других лексических объявлений. Использование typeof до строки объявления по-прежнему вызывает ReferenceError из-за временной мертвой зоны (TDZ).

if (typeof z === "undefined") {
  // Uncaught ReferenceError: Cannot access 'z' before initialization
}
let z = 1;

Кроме того, объявления let и const не создают свойств в глобальном объекте, поэтому их нельзя проверить с помощью оператора in.

let z;
if ("z" in window) {
  // false, even if z is declared globally with let or const
}

Если вы хотите совместно использовать глобальные переменные между различными скриптами, более целесообразно использовать var или явно присоединять их к глобальному объекту:

window.myGlobalVar = "foo";

Оператор void и undefined

Оператор void также может использоваться для получения значения undefined. Это очень часто встречается в минифицированном коде, потому что void 0 занимает на 3 байта меньше места и его нельзя переопределить. Обычно следует избегать этого шаблона в своем коде.

let x;
if (x === void 0) {
  // these statements execute
}

// y has not been declared before
if (y === void 0) {
  // throws Uncaught ReferenceError: y is not defined
}

Спецификации

Спецификация
ECMAScript® 2027 Language Specification
# sec-undefined

Совместимость с браузерами

Desktop Mobile Server
Chrome Edge Firefox Opera Safari Chrome Android Firefox for Android Opera Android Safari on iOS Samsung Internet WebView Android WebView on iOS Bun Deno Node.js
undefined
1
12
1
3
1
18
4
10.1
1
1.0
4.4
1
1.0.0
1.0
0.10.0

См. также

  • Типы данных и структуры данных JavaScript
  • null

© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API