js判读数据类型,instanceof的实现原理

348 阅读1分钟

从原型链查找,如果找到则为true。

function _instanceof(left,right){
    let left__pro=left.__proto__;
    let rightPro=right.prototype;
    while(true){
        if(left!==null&&right!==null){
            if(left__pro===rightPro){
                return true
            }else{
                return false
            }
            left__pro=left.__proto__
        }
        
    }
}

以上只是instanceof的一种实现方式,下面我们就细细来品一下原理。

万物皆有根。树是树他妈生的,猴是猴他妈生的。你怎么知道,树不是猴生的,猴生的不是树呢,答案很简单,他们的基因不同,DNA对比不上。那么instanceof就是一个链条就相当于做DNA对比。

每一个存在于JavaScript环境中的值,除了 null,undefined,都会有一个神奇的“__proto__”属性。
看下面的例子:
    let isFn=function(){};

    let isObj={a:1};
    let isArray=[1];

    let isStr='1';
    let isNum=1;
    let isBoolean=true;
    let isSymbol=Symbol();
    let isBigInt=BigInt('1');
    
    let isNull=null;
    let isUndefined=undefined;

    CheckType(isFn);
    function CheckType(value){
        console.log(value.__proto__)
    }
    
    
    checkPrototype(Function)
    checkPrototype(Object)
    checkPrototype(Array)
    checkPrototype(Number)
    checkPrototype(String)
    checkPrototype(Boolean)

    function checkPrototype(value){
        console.log(value.prototype)
    }


其实上面写了这么多都是废话,你只要记住左边的__proto__===右边的protototype就好了。