空和未定义

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。