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