undefined
BaselineWidely 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 | |
---|---|
Записываемое | нет |
Перечисляемое | нет |
Настраиваемое | нет |
Интерактивный пример
function test(t) { if (t === undefined) { return "Undefined value!"; } return t;}let x;console.log(test(x));// Expected output: "Undefined value!"
Синтаксис
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® 2026 Language Specification # sec-undefined |