--- title: undefined slug: Web/JavaScript/Reference/Global_Objects/undefined tags: - JavaScript - NeedsUpdate - Reference translation_of: Web/JavaScript/Reference/Global_Objects/undefined ---
Значение глобального свойства undefined
представляет значение {{Glossary("Undefined", "undefined")}}
. Это одно из {{Glossary("Primitive", "примитивных значений")}} JavaScript.
{{EmbedInteractiveExample("pages/js/globalprops-undefined.html")}}
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
, если она не {{jsxref("Statements/return", "возвращает", "", 1)}} какого-либо значения.
Поскольку undefined
не является {{jsxref("Reserved_Words", "зарезервированным словом", "", 1)}}, он может использоваться в качестве идентификатора (имени переменной) в любой области видимости, за исключением глобальной.
// печатает '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
, в то время как оператор идентичности этого не делает. {{jsxref("Global_Objects/null", "null")}} не эквивалентен undefined
. Для более подробной информации смотрите {{jsxref("Operators/Comparison_Operators", "операторы сравнения", "", 1)}}.
typeof
и undefined
В качестве альтернативы можно использовать оператор {{jsxref("Operators/typeof", "typeof")}}:
var x; if (typeof x === 'undefined') { // эти инструкции будут выполнены }
Одной из причин использования оператора {{jsxref("Operators/typeof", "typeof")}} может быть та, что он не выбрасывает ошибку, если переменная не была определена.
// переменная x не была определена ранее if (typeof x === 'undefined') { // вычислится в true без ошибок // эти инструкции будут выполнены } if (x === undefined) { // выкинет ReferenceError }
Однако, уловки такого рода должны избегаться. JavaScript является языком со статической областью видимости, так что узнать, была ли переменная определена, можно путём просмотра, была ли она определена в охватывающем контексте. Единственным исключением являет глобальная область видимости, но глобальная область видимости привязана к глобальному объекту, так что проверка существования переменной в глобальном контексте может быть осуществлена путём проверки существования свойства глобального объекта (например, используя оператор {{jsxref("Operators/in", "in")}}).
void
и undefined
Третьей альтернативой является оператор {{jsxref("Operators/void", "void")}}.
var x; if (x === void 0) { // эти инструкции будут выполнены } // переменная y не была определена ранее if (y === void 0) { // выкинет ReferenceError (в отличие от оператора `typeof`) }
{{Compat("javascript.builtins.undefined")}}