MDN’s new design is in Beta! A sneak peek: https://blog.mozilla.org/opendesign/mdns-new-design-beta/

Сводка

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

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

Синтаксис

undefined

Описание

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

В современных браузерах (JavaScript 1.8.5 / Firefox 4+), undefined является ненастраиваемым и незаписываемым свойством, в соответствии со спецификацией ECMAScript 5. Даже когда это не так, избегайте его переопределения.

Переменная, не имеющая присвоенного значения, обладает типом undefined. Также возвращают undefined метод или инструкция, если переменная, участвующая в вычислениях, не имеет присвоенного значения. Функция возвращает undefined, если она не возвращает какого-либо значения.

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

// печатает 'foo string'
(function(){ var undefined = 'foo'; console.log(undefined, typeof undefined); })();

// печатает 'foo string'
(function(undefined){ console.log(undefined, typeof undefined); })('foo');

Примеры

Пример: строгое сравнение и undefined

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

var x;
if (x === undefined) {
  // эти инструкции будут выполнены
}
else {
  // эти инструкции не будут выполнены
}

Обратите внимание: здесь используется оператор строгого равенства (идентичности) вместо простого оператора равенства, поскольку x == undefined также проверяет, является ли x равным null, в то время как оператор идентичности этого не делает. null не эквивалентен undefined. Для более подробной информации смотрите операторы сравнения.

Пример: оператор typeof и undefined

В качестве альтернативы можно использовать оператор typeof:

var x;
if (typeof x === 'undefined') {
  // эти инструкции будут выполнены
}

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

// переменная x не была определена ранее
if (typeof x === 'undefined') { // вычислится в true без ошибок
  // эти инструкции будут выполнены
}

if (x === undefined) { // выкинет ReferenceError

}

Однако, уловки такого рода должны избегаться. JavaScript является языком со статической областью видимости, так что узнать, была ли переменная определена, можно путём просмотра, была ли она определена в охватывающем контексте. Единственным исключением являет глобальная область видимости, но глобальная область видимости привязана к глобальному объекту, так что проверка существования переменной в глобальном контексте может быть осуществлена путём проверки существования свойства глобального объекта (например, используя оператор in).

Пример: оператор void и undefined

Третьей альтернативой является оператор void.

var x;
if (x === void 0) {
  // эти инструкции будут выполнены
}

// переменная y не была определена ранее
if (y === void 0) {
  // выкинет ReferenceError (в отличие от оператора `typeof`)
}

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

Спецификация Статус Комментарии
ECMAScript 1-е издание. Стандарт Изначальное определение. Реализована в JavaScript 1.3.
ECMAScript 5.1 (ECMA-262)
Определение 'undefined' в этой спецификации.
Стандарт  
ECMAScript 2015 (6th Edition, ECMA-262)
Определение 'undefined' в этой спецификации.
Стандарт  

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

Возможность Chrome Firefox (Gecko) Internet Explorer Opera Safari
Базовая поддержка (Да) (Да) (Да) (Да) (Да)
Возможность Android Chrome для Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Базовая поддержка (Да) (Да) (Да) (Да) (Да) (Да)

Смотрите также

Метки документа и участники

Метки: 
 Внесли вклад в эту страницу: sasd97, SphinxKnight, Mingun
 Обновлялась последний раз: sasd97,