为什么typeof null是object?

239 阅读1分钟

最近在面试的时候遇到了一个好玩的问题,面试官问null是什么数据类型,我不假思索的回答null属于原始(基本)数据类型。接着面试官又问到,那为什么typeof null的结果是object。。。

说实话,我没有自己试过typeof null的结果,所以当时没有回答上来。按理说null属于原始(基本)数据类型,typeof的结果就是它本身才对,为什么是object呢?

后来我自己测试了一下typeof null的结果确实是object。。。???为啥呀,我深刻的记得null属于六大原始(基本)数据类型。
难道是我记错了?我又翻了一遍自己的笔记,确实没记错,那这又是为什么呢??

经过我查阅一些网上资料和相关书籍,才发现这是JS在设计之初留下的历史遗留问题。

在JS中进行数据底层存储的时候是用二进制存储的,这是一定的,而且它的前三位是代表存储的数据类型,而000是代表object类型也就是引用类型的数据。而null正好全是0,所以它巧妙的符合object类型的存储格式,所以在typeof检测的时候,它才会输出object

所以面试官问的这个问题属于JS诞生以来就存在的历史遗留BUG。