typeof
可以判断变量的类型,准确的来说,是判断非对象类型的变量类型:number,string,boolean,function,undefined,symbol。但是遗憾的是,遇到判断对象类型的数据时,只能告诉我们这个是object,但是无法精准哪种object.如:null,Array,new String, new Date
let str = new String("abc")
typeof str // object
str instanceof String // true
let n = null
typeof n // object
let arr = []
typeof arr // object
此时,判断object类型的具体是哪种object,可以使用instanceof(并不是唯一)
typeof 原理
js在底层存储变量的时候,会在变量的机器码的低位1-3位存储其类型信息
- 000:对象
- 010:浮点数
- 100:字符串
- 110:布尔
- 1:整数
但是
null:所有机器码均为0。就导致null的类型无法准确判断。同时类似的类型也是这个问题
instanceof
主要作用是,判断实例是否属于某种类型
function Person() {}
const person = new Person();
person instanceof Person // true
intanceof 实现原理
判断:右边变量的 prototype 是否在左边变量的原型链上
也就是通过原型对象和原型链的方式
这里就涉及对象的一些知识。这里不扩展。可以查看