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.
Please help us by answering a few questions.
Сводка
Значение глобального свойства 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® 2025 Language Specification # sec-undefined |
Совместимость с браузерами
Report problems with this compatibility data on GitHubdesktop | mobile | server | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
undefined |
Legend
Tip: you can click/tap on a cell for more information.
- Full support
- Full support