简单实现instanceof运算符
instanceof运算符是通过判断后面类的prototype对象是否在前面的引用数据类型变量的原型链上,用于判断一个引用数据的真实类型,如果在就返回true,否则就返回false
例如:typeof判断引用数据类型是只能得到function、object,无法准确判断一个数据是否为数组,instanceof是可以判断一个数据是否为数组。
const arr = [1,2,3];
console.log(typeof arr) //object
console.log(arr instanceof Array) //true
简单实现如下
function _instanceof(left,right) {
//存放右边类的prototype对象
let rightPro = right.prototype
//存放左边引用数据类型的__proto__对象
let leftPro = left.__proto__
//当原型链到达顶部时表示右边对象的prototype对象不在该引用数据的
//原型链上,则返回false
if(leftPro == null){
return false
}
//当left的__proto__对象等于right的prototype对象时,表示
//右边的对象的prototype对象在该引用数据的原型链上,则返回true
if(leftPro == rightPro){
return true
}
//递归依次向上查找
return _instanceof(leftPro,right)
}
const arr = [1,2]
const obj = {a:1,b:2}
const date = new Date()
console.log(_instanceof(arr,Array))//true
console.log(_instanceof(date,Date))//true
console.log(_instanceof(obj,Array))//false