空和未定义

nullundefined 之间的区别

nullundefined 分享抽象相等 == 但不严格相等 ===

null == undefined   // true
null === undefined  // false

它们代表略有不同的东西:

  • undefined 表示缺少值,例如在创建标识符/对象属性之前,或者在标识符/函数参数创建和第一次设置之间的时间段(如果有)。
  • null 表示故意缺少已创建的标识符或属性*的值*。

它们是不同类型的语法:

  • undefined全局 Object属性,通常在全局范围内是不可变的。这意味着你可以在任何地方定义除全局命名空间之外的标识符,从该范围隐藏 undefined(尽管事情仍然可以是 undefined
  • null 是一个单词文字,所以它的含义永远不会改变,尝试这样做会引发错误

nullundefined 之间的相似之处

nullundefined 都是假的。

if (null) console.log("won't be logged");
if (undefined) console.log("won't be logged");

nullundefined 都不等于 false(见这个问题 )。

false == undefined   // false
false == null        // false
false === undefined  // false
false === null       // false

使用 undefined

  • 如果当前范围不可信,请使用评估为 undefined 的内容,例如 void 0;
  • 如果 undefined 被另一个值遮蔽,那就像遮蔽 ArrayNumber 一样糟糕。
  • 避免设置undefined。如果要从对象 foodelete foo.bar; 中删除属性。 **
  • 针对 undefined 的存在测试标识符 foo 可能会抛出参考错误,而是使用 typeof foo 来反对 undefined