问:因为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(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。