在 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
改用吗?