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 with JavaScript enabled. Enable JavaScript to view data.

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

* `NaN`
* `null`