前言
关于null
和undefined
的区别网上有很多不同的解释,为了方便自己也方便读者所以我做了一些简单整理
区别
开门见山,直接上主菜:
null
和undefined
是javascript的两种不同的基本类型
, 可以通过typeof去判断:
也可以通过typeof null // "object" 我去,null为啥类型是object?(别急,接下来我会解释) typeof undefined // "undefined"
===
来判断, 毕竟===
既判断值又判断类型嘛null === undefined // false null == undefined // true
null
和undefined
转换为number类型时的值不同Number(null) // 0 Number(undefined) // NaN
其实在js开发中,这俩基本一样,都可以用来清空变量。要是硬说意义上的区别的话,null
表示这个变量为空,不应该存在。而undefined
表示该变量应该存在但还没有定义。
null在类型判断时为什么是object
这是一段历史,1995年Javascript诞生之初, 在实现js类型判断的方法时(也就是typeof),数值是以32位存储的,由标志位(1~3位)和数值组成。标志位存储的是低位的数据。这里有五种标志位:
000
表示对象
1
表示整数
010
表示浮点数
100
表示字符串
110
表示布尔类型
有两个特殊值:
undefined
用-2^30
表示null
用全0
表示
这不巧了吗这不是,null
的低位也是000
,所以误打误撞成为了object
,这一点一直被认为是个bug,直到es6的时候typeof null === 'null'
的提案被否决,typeof null === 'object'
变成了feature,也就是说这个"bug"不会被“修复”了
关于这段历史可以查看原文