undefined
试试看
值
原始值 undefined
。
undefined 的属性属性 |
|
---|---|
可写 | 否 |
可枚举 | 否 |
可配置 | 否 |
描述
undefined
是全局对象的属性。也就是说,它是全局范围内的变量。
在所有非遗留浏览器中,undefined
是一个不可配置、不可写的属性。即使不是这种情况,也要避免覆盖它。
未分配值的变量类型为 undefined
。如果正在评估的变量没有分配值,方法或语句也会返回 undefined
。如果函数没有返回
值,则函数返回 undefined
。
示例
严格相等和 undefined
你可以使用 undefined
和严格相等和不相等运算符来确定变量是否具有值。在下面的代码中,变量 x
未初始化,if
语句评估为 true。
js
let x;
if (x === undefined) {
// these statements execute
} else {
// these statements do not execute
}
注意: 此处必须使用严格相等运算符(与标准相等运算符相反),因为 x == undefined
还检查 x
是否为 null
,而严格相等则不检查。这是因为 null
不等效于 undefined
。
有关详细信息,请参阅 相等比较和相同性。
typeof 运算符和 undefined
或者,可以使用 typeof
js
let x;
if (typeof x === "undefined") {
// these statements execute
}
使用 typeof
的一个原因是,如果变量未声明,它不会引发错误。
js
// x has not been declared before
// evaluates to true without errors
if (typeof x === "undefined") {
// these statements execute
}
// Throws a ReferenceError
if (x === undefined) {
}
但是,还有另一种选择。JavaScript 是一种静态作用域语言,因此可以通过查看变量是否在封闭上下文中声明来确定它是否已声明。
全局范围绑定到 全局对象,因此可以通过使用 in
运算符检查全局对象上是否存在属性来检查变量在全局上下文中的存在性,例如
js
if ("x" in window) {
// These statements execute only if x is defined globally
}
void 运算符和 undefined
void
运算符是第三种选择。
js
let 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
}
规范
规范 |
---|
ECMAScript 语言规范 # sec-undefined |
浏览器兼容性
BCD 表仅在浏览器中加载