空和未定义
null
和 undefined
之间的区别
null
和 undefined
分享抽象相等 ==
但不严格相等 ===
,
null == undefined // true
null === undefined // false
它们代表略有不同的东西:
undefined
表示缺少值,例如在创建标识符/对象属性之前,或者在标识符/函数参数创建和第一次设置之间的时间段(如果有)。null
表示故意缺少已创建的标识符或属性*的值*。
它们是不同类型的语法:
undefined
是全局 Object 的属性,通常在全局范围内是不可变的。这意味着你可以在任何地方定义除全局命名空间之外的标识符,从该范围隐藏undefined
(尽管事情仍然可以是undefined
)null
是一个单词文字,所以它的含义永远不会改变,尝试这样做会引发错误。
null
和 undefined
之间的相似之处
null
和 undefined
都是假的。
if (null) console.log("won't be logged");
if (undefined) console.log("won't be logged");
null
或 undefined
都不等于 false
(见这个问题 )。
false == undefined // false
false == null // false
false === undefined // false
false === null // false
使用 undefined
- 如果当前范围不可信,请使用评估为 undefined 的内容,例如
void 0;
。 - 如果
undefined
被另一个值遮蔽,那就像遮蔽Array
或Number
一样糟糕。 - 避免设置为
undefined
。如果要从对象foo
,delete foo.bar;
中删除属性栏。 ** - 针对
undefined
的存在测试标识符foo
可能会抛出参考错误,而是使用typeof foo
来反对undefined
。