美文网首页
typeof与instanceof

typeof与instanceof

作者: 青色河马 | 来源:发表于2016-12-01 13:58 被阅读0次

typeof

typeof是判断变量类型,它的返回值值为字符串,分别有6个值:number,boolean,string,function,object,undefined。
一般我们使用typeof来判断变量是否存在,并进行代码操作:

if(typeof a == undefined) console.log('N');

有人有时会用if(a)来判断变量是否存在,但是这是不严谨的,因为变量值为null与undefined的状态是一样的,这样就无法排除null
缺点:
对于 Array,null ,函数实例等特殊对象使用 typeof 一律返回 object,对于object,无法做进一步判断;

function parent(){
        console.log('parent')
    }
    function child(){
        console.log('child')
    }
    var f1=new parent;
    var f2=new child;
    console.log(typeof f1)//object
    console.log(typeof f2)//object
    console.log(f1==parent);//false

而此时instanceof的出现正好妳补了这一局限性。

instanceof

instance中文翻译为实例,因此instanceof的含义就不言而喻,判断该对象是谁的实例,同时我们也就知道instanceof是对象运算符。
这里的实例就牵扯到了对象的继承,它的判断就是根据原型链进行搜寻,在对象obj1的原型链上如果存在另一个对象obj2的原型属性,那么表达式(obj1 instanceof obj2)返回值为true;否则返回false。
例如:

        function foo() {
            
        }
        function foo1() {
            
        }
        foo.prototype = new foo1();
        var f = new foo;
        console.log(f instanceof foo1); // true
        console.log(f instanceof foo); // true
        console.log(f instanceof Object); // true
        console.log(f instanceof Array); // false

因为foo函数和foo1函数都存在对象f的原型链上,即对象f的原型链:f.__proto==>foo.prototype(foo1)==>foo1.prototype==>Object,而对象Array不存在对象f的原型链上,所以输出结果如上。
所以我们可以使用instanceof来解决typeof的局限性。因为Array,null 等特殊对象使用 typeof 一律返回 object,无法进一步判断,此时使用instanceof可以进一步对object进行判断,判断是否是Array或某个函数的实例,这样对于条件判断的使用就更灵活了,现在我们附上一段代码,就看的更明确了。

function parent(){
    
    }
    function child(){
    
    }
    var f1=new parent;
    var f2=new child;
    console.log(typeof f1)//object
    console.log(typeof f2)//object
    console.log(f1==parent);//false
    console.log(f1 instanceof parent);//true
    console.log(f1 instanceof child);//false
    console.log(f2 instanceof child);//true

总结:
想必到这里大家也都明白两者的含义和用法,总之,typeof和instanceof都是用来判断变量类型的,两者的区别在于:

  • typeof判断所有变量的类型,返回值有number,boolean,string,function,object,undefined
  • typeof对于丰富的对象实例,只能返回"Object"字符串。
  • instanceof用来判断对象,代码形式为obj1 instanceof obj2(obj1是否是obj2的实例),obj2必须为对象,否则会报错!其返回值为布尔值
  • instanceof可以对不同的对象实例进行判断,判断方法是根据对象的原型链依次向下查询,如果obj2的原型属性存在obj1的原型链上,(obj1 instanceof obj2)值为true。

相关文章

  • JavaScript的类型检查与验证

    目录 一、 typeof 二、 instanceof 三、 typeof 与 instanceof 区别 四、 获...

  • Typeof与Instanceof

    typeof 是一个操作符,主要的目的是检测一个变量是不是基本数据类型的变量,同时也可以说是确定一个变量是字符串,...

  • typeof与instanceof

    typeof typeof是判断变量类型,它的返回值值为字符串,分别有6个值:number,boolean,str...

  • typeof 与 instanceof

    一、typeof判断返回 的一定是字符串能判断以下几种:number、boolean 、string 、undef...

  • typeof与instanceof?

    相同点:JavaScript 中 typeof 和 instanceof 常用来判断一个变量是否为空,或者是什么类...

  • typeof 与 instanceof

    typeof用于原始值但用于引用值时,我们虽然可以判断出某个值是一个对象,但是当我们想要知道某个值是一个什么类型的...

  • Javascript 类型判断与转换

    typeof vs instanceof typeof 用来判断原始类型instanceof 用来判断对象的类型 ...

  • typeof & instanceof(2018-05-19)

    typeof instanceof

  • Javascript语法和基本方法

    1.typeof 和instanceof的联系 typeof:基本数据类型 instanceof:引用类型

  • JS中的 Instanceof

    Instanceof 的功能类似与 typeof 对于值类型,你可以通过typeof判断,string/numb...

网友评论

      本文标题:typeof与instanceof

      本文链接:https://www.haomeiwen.com/subject/ndmxmttx.html