我正在阅读“面向Web开发人员的专业Javascript”第4章,它告诉我五种原语是:未定义,空,布尔值,数字和字符串。
如果null
是原始的,为什么还typeof(null)
返回"object"
?
这是否意味着null
通过引用传递(我假设此处所有对象都通过引用传递),因此使其不是原始类型?
我正在阅读“面向Web开发人员的专业Javascript”第4章,它告诉我五种原语是:未定义,空,布尔值,数字和字符串。
如果null
是原始的,为什么还typeof(null)
返回"object"
?
这是否意味着null
通过引用传递(我假设此处所有对象都通过引用传递),因此使其不是原始类型?
Answers:
null
//自JavaScript诞生以来 typeof null ==='对象';在JavaScript的第一个实现中,JavaScript值表示为类型标记和值。对象的类型标记为0。
null
表示为NULL指针(在大多数平台中为0x00)。因此,null具有0作为类型标记,因此typeof
返回“对象” 值。(参考)提出了针对ECMAScript的修复程序(通过选择加入),但已被拒绝。它将导致
typeof null === 'null'
。
如果
null
是原始的,为什么还typeof(null)
返回"object"
?
因为规范是这样说的。
11.4.3的
typeof
操作产生UnaryExpression:
typeof
UnaryExpression的评估如下:
- 令val为评估UnaryExpression的结果。
- 如果Type(val)是Reference,则
a。如果IsUnresolvableReference(val)为true,则返回“undefined
”。
b。令val为GetValue(val)。- 根据表20 返回由Type(val)确定的字符串。
typeof
告诉您是否可以对某些对象调用方法。
null
和undefined
。
.
或[ ]
)。
正如已经指出的,规范是这样说的。但是,由于JavaScript的实现要早于ECMAScript规范的编写,并且该规范非常谨慎,因此不能纠正最初实现的缺点,因此仍然存在一个合理的问题,即为什么要首先采用这种方式。道格拉斯·克罗克福德(Douglas Crockford)称其为错误。Kiro Risk 认为这有点道理:
null
与之相对,其背后的原因是,与相比undefined
,(并且仍然)经常在出现对象的地方使用。换句话说,null
通常用于表示对对象的空引用。当布伦丹·艾希(Brendan Eich)创建JavaScript时,他遵循相同的范例,并且可以说返回“对象”是合理的(可以说)。实际上,ECMAScript规范将原始值定义null
为表示有意缺少任何对象值的原始值(ECMA-262,11.4.11)。
摘自《YDKJS》
这是JS中一个长期存在的错误,但可能永远都不会修复。Web上太多的代码依赖于该错误,因此对其进行修复将导致更多的错误!
如果
null
是原始的,为什么还typeof(null)
返回“object
”?
简而言之:这是ECMAScript中的错误,类型应为 null
参考:https : //developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/null
在JavaScript中,null为“ nothing”。它应该是不存在的东西。不幸的是,在JavaScript中,null的数据类型是一个对象。您可以认为typeof null是对象是JavaScript中的错误。它应该为空。
对于那些对某些代码产生这种行为感兴趣的人,这是您的链接。... 为什么typeof null是带有隐含对象