为什么typeof null返回object

我们来看一个奇怪的现象:

为什么typeof null返回object

typeof null的结果竟然是object!

不是应该为null吗?

针对这个问题,我来说明一下:

计算机用typeof去检测一个东西的时候,是根据「机器码」的后三位来返回「数据类型」的。

所谓「机器码」,就是01111000这种二进制数字。

当一个东西机器码后三位是000,typeof这个东西就会返回object。

为什么我们用typeof去检测一个引用类型的时候,返回的是object?就是因为这个引用类型的数据在存储的时候它的机器码后三位为000。

null在机器码中的存储是 000…000,每个位都是0。

当我用typeof去检测null的时候,发现后三位是000,所以返回object。

因为null和引用类型机器码后三位都是000,所以typeof返回都是object。

这其实是源于js设计时候的一个bug(语言设计时出的bug),而并不是我们这个程序执行出了bug。