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