typeof与instanceof - 详解

155 阅读1分钟

是什么: typeof 是判断参数是什么类型的实例,返回值为说明运算数类型的字符串。 返回值结果:“number”、“string”、“boolean”、“object”、“function”、“undefined” 若参数为除函数外(Object类型,Array类型,Date类型,RegExp类型等)的引用类型,始终返回“object”,对于null始终返回“object”,所以用typeof来判断参数类型有很大的局限性。

instanceof是用来判断一个对象在其原型链中是否存在一个构造函数的prototype属性,a instanceof b:判断a是否为b的实例,可以用于继承关系中,b是c的父对象,a是c的实例,a instanceof b 与 a instanceof c 结果均为true,对于所有的引用类型,均为Object的实例

为什么:结合判断数据类型

怎么做: 通过这两种方式封装一个函数专门进行类型判断:

    function getDataType(obj) {
        if(obj === null){
            return "null";
        }else if(typeof obj === "object"){
            if(obj instanceof Array){
                return "array";
            }else{
                return "object";
            }
        }else{
            return typeof obj;
        }
    }
    
    console.log(getDataType(111)); //number
    console.log(getDataType("fasd"));//string
    console.log(getDataType(true));//boolean
    console.log(getDataType(function () { }));//function
    console.log(getDataType([]));//array
    console.log(getDataType({}));//object
    console.log(getDataType(null));//null
    console.log(getDataType(undefined));//undefined
    console.log(getDataType(/\n/));//object
    var a;
    console.log(getDataType(a));//undefined 如果传入没有声明的变量会直接报错