回答·24
最热
最新
- 因为都是二进制存储,obj的判断是前三位都是0就是obj了,而null二进制存储都是0,所以就判为obj了
- 因为对象的原型链,最顶层就是null
- 是
- 因为null也是对象,是一个空对象
- 首先这是个标准规定的行为 运行时是源于数据存储二进制的底层实现
- 不同的对象在底层都表示为二进制,在 JavaScript 中二进制前三位都为 0 的话会被判断为 object 类型, null 的二进制表示是全 0,自然前三位也是 0,所以执行 typeof 时会返回“ object ”。
- 因为null 是个空的东西
- 因为计算机数据是用二进制表示的,在JS中开头三位数为000表示为Object null都是0
- 因为null实际上是一个对象的引用,指向一个空对象。
- 1、历史原因:1995年JavaScript语言的第一版,所有值都设计成32位, 其中最低的3位用来表述数据类型,object对应的值是000。 当时,只设计了五种数据类型(对象、整数、浮点数、字符串和布尔值),完全没考虑null,只把它当作object的一种特殊值,32位全部为0。 这是typeof null返回object的根本原因。 2、原理:原理是这样的,不同的对象在底层都表示为二进制,在 JavaScript 中二进制前三位都为 0 的话会被判断为 object 类型, null 的二进制表示是全 0,自然前三位也是 0,所以执行 typeof 时会返回“ object ”。 这个bug是第一版Javascript留下来的。在这个版本,数值是以32字节存储的,由标志位(1~3个字节)和数值组成。标志位存储的是低位的数据。 这里有五种标志位: (1) 000:对象,数据是对象的应用。 (2) 1:整型,数据是31位带符号整数。 (3) 010:双精度类型,数据是双精度数字。 (4) 100:字符串,数据是字符串。 (5) 110:布尔类型,数据是布尔值。 最低位有一位,那么标志位只有一个1字节长度;或者是零位,标志位有3个字节长度,多出两个了字节,一共多出四种类型。