null并undefined分享抽象平等==而不是严格平等===,
null == undefined // 真正 null === undefined // 假
它们代表略有不同的事物:
undefined表示缺少值,例如在创建标识符/对象属性之前,或者在创建标识符/函数参数与首次设置标识符(如果有)之间的时间段内。
null表示故意缺少已经创建的标识符或属性的值。
它们是不同类型的语法:
undefined是全局对象的属性,通常在全局范围内不可变。这意味着您可以在全局命名空间之外定义标识符的任何地方都可以undefined从该范围中隐藏(尽管仍然可以 undefined)
null是字面意思的单词,因此它的含义是永不改变的,试图这样做将会抛出Error。
null而且undefined都是虚假的。
if (null) console.log("won't be logged"); if (undefined) console.log("won't be logged");
无论是null或undefined等于false(见这个问题)。
false == undefined // 假 false == null // 假 false === undefined // 假 false === null // 假
如果当前范围不可信,请使用评估为undefined的值,例如void 0;。
如果undefined被另一个值遮蔽,则与遮蔽Array或一样坏Number。
避免将设置为undefined。如果要从Object删除属性栏,请改为。 foodelete foo.bar;
存在检测标识foo对undefined 可能抛出一个引用错误,使用typeof foo针对"undefined"代替。