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
是特性在
全局对象
. That is, it is a variable in global scope. The initial value of
undefined
is the primitive value
undefined
.
In modern browsers (JavaScript 1.8.5 / Firefox 4+),
undefined
is a non-configurable, non-writable property, per the ECMAScript 5 specification. (Even when this is not the case, avoid overriding it.)
A variable that has not been assigned a value is of type
undefined
. A method or statement also returns
undefined
if the variable that is being evaluated does not have an assigned value. A function returns
undefined
if a value was not
returned
.
小心。
While it is possible to use it as an
identifier
(variable name) in any scope other than the global scope (because
undefined
is not a
reserved word
), doing so is a very bad idea that will make your code difficult to maintain and debug.
// DON'T DO THIS
// logs "foo string"
(function() {
var undefined = 'foo';
console.log(undefined, typeof undefined);
})();
// logs "foo string"
(function(undefined) {
console.log(undefined, typeof undefined);
})('foo');
范例
严格相等和 undefined
可以使用
undefined
and the strict equality and inequality operators to determine whether a variable has a value. In the following code, the variable
x
is not initialized, and the
if
statement evaluates to true.
var x;
if (x === undefined) {
// these statements execute
}
else {
// these statements do not execute
}
注意:
strict equality
operator (as opposed to the
standard equality
operator) must be used here, because
x == undefined
also checks whether
x
is
null
, while strict equality doesn't. This is because
null
is not equivalent to
undefined
.
见
comparison operators
了解细节。
typeof 运算符和 undefined
Alternatively,
typeof
可以被使用:
var x;
if (typeof x === 'undefined') {
// these statements execute
}
One reason to use
typeof
is that it does not throw an error if the variable has not been declared.
// x has not been declared before
if (typeof x === 'undefined') { // evaluates to true without errors
// these statements execute
}
if (x === undefined) { // throws a ReferenceError
}
However, there is another alternative. JavaScript is a statically scoped language, so knowing if a variable is declared can be read by seeing whether it is declared in an enclosing context.
The global scope is bound to the
全局对象
, so checking the existence of a variable in the global context can be done by checking the existence of a property on the
全局对象
,使用
in
operator, for instance:
if ('x' in window) {
// these statements execute only if x is defined globally
}
void 运算符和 undefined
void
operator is a third alternative.
var x;
if (x === void 0) {
// these statements execute
}
// y has not been declared before
if (y === void 0) {
// throws Uncaught ReferenceError: y is not defined
}
规范
浏览器兼容性
The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out
https://github.com/mdn/browser-compat-data
and send us a pull request.
更新 GitHub 上的兼容性数据
|
Desktop
|
Mobile
|
Server
|
|
Chrome
|
Edge
|
Firefox
|
Internet Explorer
|
Opera
|
Safari
|
Android webview
|
Chrome for Android
|
Firefox for Android
|
Opera for Android
|
Safari on iOS
|
Samsung Internet
|
Node.js
|
undefined
|
Chrome
1
|
Edge
12
|
Firefox
1
|
IE
5.5
|
Opera
3
|
Safari
1
|
WebView Android
1
|
Chrome Android
18
|
Firefox Android
4
|
Opera Android
10.1
|
Safari iOS
1
|
Samsung Internet Android
1.0
|
nodejs
0.1.100
|
图例
-
完整支持
完整支持
另请参阅