Musa
问:因为typeof null === object,所以null是对象?
答:不是。null是Javascript里的一种基本类型,其它几种基本类型还有:string,number,boolean,undefined。而object是引用类型,也称为对象类型。
在Javascript中,不同的数据类型在底层都表示为二进制,比如:
000 - 对象,数据是对象的引用 1 - 整型,数据是31位带符号整数 010 - 双精度类型,数据是双精度数字 100 - 字符串,数据是字符串 110 - 布尔类型,数据是布尔值
二进制的前三位为0会被 typeof 判定为object类型。
而null是一个空值,其二进制表示全是0,自然前三位也是000,所以执行typeof的时候会返回object,产生假象。
若要拿到真实的数据类型,可以使用:Object.prototype.toString.call
Object.prototype.toString.call(null)
'[object Null]'
Object.prototype.toString.call(undefined)
'[object Undefined]'
Object.prototype.toString.call({})
'[object Object]'
Object.prototype.toString.call('abc')
'[object String]'
Object.prototype.toString.call(123)
'[object Number]'
// 注意,这里的Number指类型,需要和内置对象Number区分开。
// 其它几个也类似
所以说,typeof null === object 原来是个语言本身的Bug。