typeof 和 instanceof 原生js实现

typeof是判断一个值类型的方法,通过 Object.prototype.toString可返回一个"[object 类型]",结合正则表达式的.exec()方法 从而实现typeof

    function type(obj) {
    var regexp = /\s(\w+)\]/;

    var result =  regexp.exec(Object.prototype.toString.call(obj))[1];
    return result;
};

console.log(type([123]));//Array
console.log(type('123'));//String
console.log(type(123));//Number
console.log(type(null));//Null
console.log(type(undefined));//Undefined

instanceof是判断一个对象是否是某个原型对象的实例的方法,只要这个对象的 __ proto __属性在这个原型对象的原型链上,就可以判断得这个对象是原型对象的实例

function Person(name,age){
    this.name=name;
    this.age=age;
}
var person=new Person("Tom",12);

var obj=[];
function _instanceof(left,right){
    var leftVal=left.__proto__;
    var rightVal=right.prototype;
    while(true){
        if(leftVal===null){
            return false;
        }
        if(leftVal===rightVal){
            return true;
        }
        leftVal=leftVal.__proto__;

    }

}
console.log(_instanceof(obj,Object))
console.log(_instanceof(Person,Function))

你可能感兴趣的:(typeof 和 instanceof 原生js实现)