undefined
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
Сводка
Значение глобального свойства 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`)
}
Спецификации
Specification |
---|
ECMAScript Language Specification # sec-undefined |
Совместимость с браузерами
BCD tables only load in the browser