Этот перевод не завершён. Пожалуйста, помогите перевести эту статью с английского
Сводка
Значение глобального свойства undefined представляет значение undefined. Это одно из примитивных значений JavaScript.
Атрибуты свойстваundefined |
|
|---|---|
| Записываемое | нет |
| Перечисляемое | нет |
| Настраиваемое | нет |
The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone https://github.com/mdn/interactive-examples and send us a pull request.
Синтаксис
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' в этой спецификации. |
Стандарт |
Совместимость с браузерами
The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out https://github.com/mdn/browser-compat-data and send us a pull request.
| Компьютеры | Мобильные | Server | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
undefined | Chrome Полная поддержка 1 | Edge Полная поддержка 12 | Firefox Полная поддержка 1 | IE Полная поддержка 5.5 | Opera Полная поддержка 3 | Safari Полная поддержка 1 | WebView Android Полная поддержка 1 | Chrome Android Полная поддержка 18 | Firefox Android Полная поддержка 4 | Opera Android Полная поддержка 10.1 | Safari iOS Полная поддержка 1 | Samsung Internet Android Полная поддержка 1.0 | nodejs Полная поддержка 0.1.100 |
Легенда
- Полная поддержка
- Полная поддержка