最近在面试的时候遇到了一个好玩的问题,面试官问
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。