在js中,存在以下几种数据类型:
1、number
2、string
3、boolean
4、null
5、undefined
6、object
7、symbol
8、bigint
而typeof 只能得到以上几种类型,需要提一点的是
typeof null === 'object' // true
我觉得可以理解为原型链的顶端为null,这样其类型为object,也比较好理解吧。
需要注意的是,typeof得到的结果会经过toString(),所以会得到一个字符串。
typeof底层原理
js会用3位数记录每个数据的类型,其值分别为
onject:000
string:100
boolean:110
number: 1
null:所有机器码均为0
undefined:−2^30
所以typeof null === object,在进行typeof运算符时会查询该数得到数据类型。
instanceof
instanceof是用来该对象是不是该构造函数的实例对象。
instanceof底层原理
function myinstanceof (A,B){
while(A.__proto__ ){
if(A.__proto__ === B.prototype) return true
A = A.__proto__
}
return false
}
其实instanceof是根据原型链查找才能判断出结果。
总结
我们可以看出typeof只能得到基本数据类型,不能得到Array类型,所以需要利用instanceof来判断。