typeof
typeof()一般用于判断基本类型null除外,typeof也可以判断function , 但判断Array, Error, null 这几个引用类型时对会被typeof判断为object,所以如果想判断这几种数据类型,就不能使用 typeof 了,比较有局限性
instanceof
instanceof检测某一个实例是否属于一个类
例如:
class Fn {
constructor(name) {
this.name = name
}
}
let obj = new Fn(‘nihao’)
console.log(obj instanceof Fn) true
判断obj是否是Fn的实例,是则返回true,否则返回 false
,instanceof检测的是原型,内部机制是通过判断对象的原型链中是否有类型的原型
注意: instanceof 后面一定要是对象类型,并且大小写不能写错
instanceof有个弊端就是,对于number,string, boolean这三种类型只能通过构造函数定义
let num = new Number(123);
console.log(num instanceof Number);
如果使用
var num = 12
console.log(num instanceof Number)则为false,还需要注意,null和undefined都返回false ,这是因为他们的类型就是自己本身,不是object创建出来的他们,所以返回了false<