我们来看一个奇怪的现象:
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。