我正在阅读“Web 开发人员的专业 Javascript”第 4 章,它告诉我五种类型的原语是:未定义、空值、布尔值、数字和字符串。
如果null
是原始类型,为什么typeof(null)
返回"object"
?
这是否意味着它null
是通过引用传递的(我假设这里所有的对象都是通过引用传递的),因此使它不是原始的?
我正在阅读“Web 开发人员的专业 Javascript”第 4 章,它告诉我五种类型的原语是:未定义、空值、布尔值、数字和字符串。
如果null
是原始类型,为什么typeof(null)
返回"object"
?
这是否意味着它null
是通过引用传递的(我假设这里所有的对象都是通过引用传递的),因此使它不是原始的?
正如已经指出的那样,规范是这样说的。但是由于 JavaScript 的实现早于 ECMAScript 规范的编写,并且规范小心翼翼地不纠正初始实现的弱点,所以仍然存在一个合理的问题,即为什么首先要这样做。道格拉斯·克罗克福德称这是一个错误。Kiro Risk认为这有点道理:
这背后的原因是
null
,与 相比undefined
,曾经(现在仍然)经常在对象出现的地方使用。换句话说,null
通常用于表示对对象的空引用。当 Brendan Eich 创建 JavaScript 时,他遵循相同的范式,并且(可以说)返回“对象”是有意义的。事实上,ECMAScript 规范将原始值定义null
为表示有意不存在任何对象值的原始值(ECMA-262, 11.4.11)。
来自YDKJS一书
这是 JS 中的一个长期存在的错误,但可能永远不会被修复。网络上太多的代码依赖于这个错误,因此修复它会导致更多的错误!
如果
null
是原语,为什么typeof(null)
返回“object
”?
简而言之:这是 ECMAScript 中的错误,类型应该是 null
参考:https : //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/null