instanceof
instanceof就是通过判断左边对象的原型琏中是否存在右边构造函数的prototype来判断类型, a instanceof b,就是判断a的原型琏上是否有b.prototype
基本类型的构造函数有Number,Boolean,String,Null,Undefined,Symbol
复杂类型的构造函数有Object,Array,Function,RegExp,Date..
注意
instanceof的左边数据必须是对象类型,如果是基本类型是一定返回false的,就像下面这种情况,通过new后num不再是基本类型
let num = 1 num.__proto__ === Number.prototype // true num instanceof Number // false num = new Number(1) num.__proto__ === Number.prototype // true num instanceof Number // true
原理
instanceof原理是通过判断右边变量的prototype在左边变量的原型琏上,在就为true,不再为false
简单实现
function myInstanceof(leftVaule, rightVaule) { let rightProto = rightVaule.prototype; // 取右表达式的 prototype 值 leftVaule = leftVaule.__proto__; // 取左表达式的__proto__值 while (true) { if (leftVaule === null) { return false; } if (leftVaule === rightProto) { return true; } leftVaule = leftVaule.__proto__ } }
原理