在 JavaScript 中,有两个值基本上表示“我不存在” -undefined和null.
程序员没有分配任何东西的属性 will be undefined,但为了让属性成为null,null必须显式分配给它。
我曾经认为有必要null因为undefined是一个原始值和null一个对象。不是,即使typeof null会 yield 'object':实际上,两者都是原始值 - 这意味着既不能undefined也不null能从构造函数返回,因为两者都将转换为空对象(必须抛出错误才能在构造函数中声明失败)。
它们也都false在布尔上下文中求值。我能想到的唯一真正的区别是,一个评估为NaN,另一个评估为0在数字上下文中。
那么为什么两者都存在undefined,null如果这只会让程序员null在试图找出是否设置了属性时错误地检查呢?
我想知道的是,是否有人有一个合理的例子,必须使用null它不能用undefined代替来表达。
所以普遍的共识似乎是这undefined意味着“没有这样的财产”,而null意味着“财产确实存在,但没有价值”。
如果 JavaScript 实现实际上会强制执行此行为,我可以忍受 - 但undefined它是一个完全有效的原始值,因此可以轻松地将其分配给现有属性以破坏此合同。因此,如果要确定属性是否存在,则必须使用in运算符或hasOwnProperty()无论如何。再说一遍: 和 的单独值有什么实际undefined用途null?
undefined当我想取消设置不再使用但我不想的属性值时,我实际上会使用delete。我应该null改用吗?