空和未定义
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。