typeof
与instanceof
都是判断数据类型的方法,区别如下:
typeof
会返回一个运算数的基本类型,instanceof
返回的是布尔值instanceof
可以准确判断引用数据类型,但是不能正确判断原始数据类型typeof
虽然可以判断原始数据类型(null
除外),但是无法判断引用数据类型(function
除外)
那为什么typeof判断null为object?
这是 JavaScript
语言的一个历史遗留问题,在第一版JS
代码中用32位比特来存储值,通过值的1-3
位来识别类型,前三位为000
表示对象类型。而null
是一个空值,二进制表示都为0,所以前三位也就是000
,所以导致 typeof null
返回 "object"