为什么typeof为空的“对象”?

2020/10/10 00:01 · javascript ·  · 0评论

我正在阅读“面向Web开发人员的专业Javascript”第4章,它告诉我五种原语是:未定义,空,布尔值,数字和字符串。

如果null是原始的,为什么还typeof(null)返回"object"

这是否意味着null通过引用传递(我假设此处所有对象都通过引用传递),因此使其不是原始类型?

有关行为的MDN页面typeof操作

null

//自JavaScript诞生以来
typeof null ==='对象';

在JavaScript的第一个实现中,JavaScript值表示为类型标记和值。对象的类型标记为0。null表示为NULL指针(在大多数平台中为0x00)。因此,null具有0作为类型标签,因此typeof返回“对象”值。参考

提出了针对ECMAScript的修复程序(通过选择加入),但已被拒绝它将导致typeof null === 'null'

如果null是原始的,为什么还typeof(null)返回"object"

因为规范是这样说的

11.4.3typeof操作

产生的UnaryExpressiontypeof UnaryExpression的评估如下:

  1. val为评估UnaryExpression的结果
  2. 如果Typeval)是Reference,则

       a。
    如果
    IsUnresolvableReferenceval)为true,则返回“ undefined”。

       b。
    valGetValueval)。
  3. 根据表20返回由Typeval确定的字符串

在此处输入图片说明

正如已经指出的,规范是这样说的。但是,由于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中的错误。它应该为空。

在JavaScript中,typeof null为'object',错误地表明null为对象。这是一个错误,很遗憾无法修复,因为它会破坏现有代码。

对于那些对某些代码产生这种行为感兴趣的人,这是您的链接...。

为什么typeof null是实现的对象

本文地址:http://javascript.askforanswer.com/weishenmetypeofweikongdeduixiang.html
文章标签: ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!