typeof null 的结果是什么,为什么?

143 阅读1分钟

typeof null 的结果是 "object"。

这看起来可能有点奇怪,为什么一个明显的空值被归类为 "object" 呢?这是由于历史原因造成的 JavaScript 设计缺陷。

在早期的 JavaScript 实现中,JavaScript 使用 32 位内存块来存储变量的值。其中的一些位用于标识变量类型。对于对象类型,这些位的值是 000,而 null 被认为是一个特殊的空指针(null pointer),其内部二进制表示全部为 0。

因此,typeof null 返回了 "object"。尽管 null 并不是真正的对象,而是一个表示空值的原始值。这个设计缺陷一直得以保留,以确保与旧代码和现有的 ECMAScript 规范兼容。

需要注意的是,这个行为已经成为了 JavaScript 的特性,并且继续存在于当前的 JavaScript 实现中。所以,当你使用 typeof 操作符检查 null 类型时,它会返回 "object"。

  1: int      - 当前存储的数据是一个 31 位的有符号整数。
010: double   - 当前存储的数据指向一个双精度的浮点数。
100: string   - 当前存储的数据指向一个字符串。
110: boolean  - 当前存储的数据是布尔值。