typeof null 为 object的问题
先看下下面的代码:
typeof 666 // 'number'
typeof 'str' // 'string'
typeof true // 'boolean'
typeof Symbol() // 'symbol'
typeof undefined // 'undefined'
typeof null //object???
有没有发现一个问题,我们在用 typeof 测试基本数据的类型时, null 的类型竟然显示为 object
可它明明不是引用类型的数据啊,妥妥的良民。为什么还会判断类型为object
这其实只是js一个 bug
???什么堂堂js还会有bug?这就要从很久之前说起了:
? lang lang ago~ js第一版时,当时采用32位的系统,数值是以32字节(由一位到三位的标识+数值组成)存储。
而 null 与object的标识都为 000, typeof操作符判断类型的依据也恰好是标识。
这就尴尬了… 想用typeof直接检测是不是object是不靠谱了。
用call:
Object.prototype.toString.call(null) //'[object Null]'
用instanceof:
let o = null;
o instanceof Object;//fasle
好像都可以呀!