undefined

Сводка

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

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

Интерактивный пример

Синтаксис

undefined

Описание

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

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

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

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

js
// печатает '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.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Specification
ECMAScript Language Specification
# sec-undefined

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

BCD tables only load in the browser

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