公众号|沐洒(ID:musama2018)关注我 带你学点有用的
问: 因为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。
啊……又学到了
公众号|沐洒(ID:musama2018)
关注我,了解更多前端冷知识。