为什么typeof null是object?

news/2024/7/19 12:54:17 标签: js, 前端, 面试

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

如果兄弟们后续在面试或者其它场合遇到这种问题,就按照我上边说的回答即可。

有任何问题欢迎交流功能。

QQ:505417246
微信:18331092918
微信公众号:Code程序人生
个人博客:https://Creator12333.github.io

在这里插入图片描述


http://www.niftyadmin.cn/n/1576415.html

相关文章

python2 python3 字符串 编码格式 处理

使用python的ctypes调用c语言中的函数,传入字符串,打印输出异常。解决方法记录于此。 参考连接: http://blog.csdn.net/u011546806/article/details/44936303 主要原因是编码格式不同导致的。python2和python3采用的默认编码不同。 python2默…

JS实现数组去重的常见方法

数组去重在前端面试中遇到的频率非常非常高。解决的方法也有很多,今天给大家介绍三种最常见,最有用的数组去重方法。 下面我们对这个数组进行去重操作。 var arr [1,1,true,true,true,true,15,15,false,false, undefined, undefined, null,null, NaN…

SCO 和 IBM 之间关于 Unix 的诉讼又来了

https://yqfile.alicdn.com/35b8fd20a8cf98f0e7631f99b0ae16a616628098.png" >SCO 在四年前经历过一次不利的裁决后宣告破产,并且变卖了所有的资产,现在的存在只是作为一个对 IBM 挪用它的 UNIX 源代码而进行唐吉可德式法律诉讼的载体。显然&…

前端数据可视化之Echarts初体验

今天在面试的时候面试官问到了有没有Echarts的开发经验,后来了解到面试官所在的部门主要就是负责数据可视化平台的搭建,以Echart和HighCharts为基础。 虽然Echarts诞生的时间已经挺久了,但是随着最近数据分析等岗位越来越热门,很多…

openssl之EVP系列之6---EVP_Encrypt系列函数编程架构及样例

openssl之EVP系列之6---EVP_Encrypt系列函数编程架构及样例 ---依据openssl doc/crypto/EVP_EncryptInit.pod和doc/ssleay.txt cipher.doc部分翻译和自己的理解写成 作者:DragonKing, Mail: wzhah263.net , 公布于:http://openssl.126.com 版本号&…

你真的熟练运用 HTML5 了吗,这10 个酷炫的 H5 特性你会几个?

HTML5不是什么新鲜事。自初始版本(2008 年 1 月)以来,我们一直在使用它的几个功能。我再次仔细查看了 HTML5 功能列表。看看我发现了什么?到目前为止,我还没有真正使用过很多! 在本文中,我列出…

解决python3环境下twisted安装问题

twisted的安装经常会出问题,提示: 1、twisted错误,报Unable to find vcvarsall.bat2、等 解决办法: 1.安装wheel,命令:pip install wheel,用于安装编译.whl文件 或者将whl文件后缀修改为zip&…

ES6复习宝典,你真的了解let和const命令吗

ES6是近些年来JavaScript改动最大的一次,也是现在前端开发的标配,在前端的面试中100%要问的内容。我最近也是在找实习工作,准备全面的复习一遍ES6的内容 ES6的第一篇内容必然是let和const。 let命令 在ES6之前,我们声明变量的方…