1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
|
---
title: undefined
slug: Web/JavaScript/Reference/Global_Objects/undefined
tags:
- JavaScript
- NeedsUpdate
- Reference
translation_of: Web/JavaScript/Reference/Global_Objects/undefined
---
<div>{{jsSidebar("Objects")}}</div>
<h2 id="Summary">Сводка</h2>
<p>Значение глобального свойства <code><strong>undefined</strong></code> представляет значение <code>{{Glossary("Undefined", "undefined")}}</code>. Это одно из {{Glossary("Primitive", "примитивных значений")}} JavaScript.</p>
<div>{{js_property_attributes(0, 0, 0)}}</div>
<p>{{EmbedInteractiveExample("pages/js/globalprops-undefined.html")}}</p>
<div class="hidden">
<p>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 <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> and send us a pull request.</p>
</div>
<h2 id="Syntax">Синтаксис</h2>
<pre class="syntaxbox"><code>undefined</code></pre>
<h2 id="Description">Описание</h2>
<p><code>undefined</code> является свойством <em>глобального объекта</em>, то есть, это переменная в глобальной области видимости. Начальным значением <code>undefined</code> является примитивное значение <code>undefined</code>.</p>
<p>В современных браузерах (JavaScript 1.8.5 / Firefox 4+), <code>undefined</code> является ненастраиваемым и незаписываемым свойством, в соответствии со спецификацией ECMAScript 5. Даже когда это не так, избегайте его переопределения.</p>
<p>Переменная, не имеющая присвоенного значения, обладает типом <code>undefined</code>. Также <code>undefined</code> возвращают метод или инструкция, если переменная, участвующая в вычислениях, не имеет присвоенного значения. Функция возвращает <code>undefined</code>, если она не {{jsxref("Statements/return", "возвращает", "", 1)}} какого-либо значения.</p>
<p>Поскольку <code>undefined</code> не является {{jsxref("Reserved_Words", "зарезервированным словом", "", 1)}}, он может использоваться в качестве <a href="/ru/docs/Web/JavaScript/Guide/Values,_variables,_and_literals#Variables">идентификатора</a> (имени переменной) в любой области видимости, за исключением глобальной.</p>
<pre class="brush: js">// печатает 'foo string'
(function(){ var undefined = 'foo'; console.log(undefined, typeof undefined); })();
// печатает 'foo string'
(function(undefined){ console.log(undefined, typeof undefined); })('foo');
</pre>
<h2 id="Examples">Примеры</h2>
<h3 id="Strict_equality_and_undefined">Пример: строгое сравнение и <code>undefined</code></h3>
<p>Вы можете использовать <code>undefined</code> и операторы строгого равенства или неравенства для определения того, имеет ли переменная значение. В следующем коде переменная <code>x</code> не определена и инструкция <code>if</code> вычисляется в <code>true</code>.</p>
<pre class="brush: js">var x;
if (x === undefined) {
// эти инструкции будут выполнены
}
else {
// эти инструкции не будут выполнены
}
</pre>
<div class="note">
<p><strong>Обратите внимание:</strong> здесь используется оператор строгого равенства (идентичности) вместо простого оператора равенства, поскольку <code>x == undefined</code> также проверяет, является ли <code>x</code> равным <code>null</code>, в то время как оператор идентичности этого не делает. {{jsxref("Global_Objects/null", "null")}} не эквивалентен <code>undefined</code>. Для более подробной информации смотрите {{jsxref("Operators/Comparison_Operators", "операторы сравнения", "", 1)}}.</p>
</div>
<h3 id="Typeof_operator_and_undefined">Пример: оператор <code>typeof</code> и <code>undefined</code></h3>
<p>В качестве альтернативы можно использовать оператор {{jsxref("Operators/typeof", "typeof")}}:</p>
<pre class="brush: js">var x;
if (typeof x === 'undefined') {
// эти инструкции будут выполнены
}
</pre>
<p>Одной из причин использования оператора {{jsxref("Operators/typeof", "typeof")}} может быть та, что он не выбрасывает ошибку, если переменная не была определена.</p>
<pre class="brush: js">// переменная x не была определена ранее
if (typeof x === 'undefined') { // вычислится в true без ошибок
// эти инструкции будут выполнены
}
if (x === undefined) { // выкинет ReferenceError
}
</pre>
<p>Однако, уловки такого рода должны избегаться. JavaScript является языком со статической областью видимости, так что узнать, была ли переменная определена, можно путём просмотра, была ли она определена в охватывающем контексте. Единственным исключением являет глобальная область видимости, но глобальная область видимости привязана к глобальному объекту, так что проверка существования переменной в глобальном контексте может быть осуществлена путём проверки существования свойства <em>глобального объекта</em> (например, используя оператор {{jsxref("Operators/in", "in")}}).</p>
<h3 id="Void_operator_and_undefined">Пример: оператор <code>void</code> и <code>undefined</code></h3>
<p>Третьей альтернативой является оператор {{jsxref("Operators/void", "void")}}.</p>
<pre class="brush: js">var x;
if (x === void 0) {
// эти инструкции будут выполнены
}
// переменная y не была определена ранее
if (y === void 0) {
// выкинет ReferenceError (в отличие от оператора `typeof`)
}
</pre>
<h2 id="Specifications">Спецификации</h2>
{{Specifications}}
<h2 id="Browser_compatibility">Совместимость с браузерами</h2>
<p>{{Compat}}</p>
<h2 id="See_also">Смотрите также</h2>
<ul>
<li>{{jsxref("Global_Objects/NaN", "NaN")}}</li>
<li>{{jsxref("Global_Objects/null", "null")}}</li>
</ul>
|