为什么js中null的类型检测为object?

今天发现一个奇怪的问题,就是null为什么会检测为object,理论上来说应该是布尔值,

查阅相关资料后发现 typeof null 输出为object其实是之前一直存在的错误,带着这个问题,咱们来看一点 JavaScript 的历史。

我们都知道 "typeof null" 的 bug,它是在 JavaScript 的初版就存在的。在这个版本中,值以 32 位的单位存储,包括一个小型类型标记(1-3 位)和值的实际数据。类型标记存储在单元的较低位上。一共有 5 种类型:

  • 000: object,表示这个数据是一个对象的引用。
  • 1: int,表示这个数据是一个 31 位的有符号整型。
  • 010: double,表示这个数据是一个双精度浮点数的引用。
  • 100: string,表示这个数据是一个字符串的引用。
  • 110: boolean,表示这个数据是一个布尔值。

两个值比较特殊:

  • undefined (JSVAL_VOID) 的值是 −2^30 整型(一个超出整型范围的数)。

  • null (JSVAL_NULL) 是机器码空指针。或者是:一个对象类型标记加上一个为零的引用。

如今应该很清楚为何 typeof 认为 null 是一个对象了:它检查了类型标记和类型标记表示的对象

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

object not found

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值