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