js最全判断对象是不是数组类型的7种方法

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/suandfei/article/details/102416473

1. 判断对象的原型对象与数组的原型对象是否相等

  var obj1={}; 
        var obj2=[1,2,3]
        var obj3=new  Date()
      //  判断原型对象是否相同 
       console.log(obj1.__proto__===Array.prototype)// false
       console.log(obj2.__proto__===Array.prototype)// true 
       console.log(obj3.__proto__===Array.prototype)// false

2.因为__proto__可能被浏览器禁用可用一个函数来代替

  var obj1={}; 
        var obj2=[1,2,3]
        var obj3=new  Date()
      //  用函数获取对象的原型对象
    console.log(Object.getPrototypeOf(obj1)===Array.prototype)// false
    console.log(Object.getPrototypeOf(obj2)===Array.prototype)//true
    console.log(Object.getPrototypeOf(obj3)===Array.prototype)//false

3.更直接的一种函数判断

 var obj1={}; 
        var obj2=[1,2,3]
        var obj3=new  Date()
      //  原型对象里有一个方法
         console.log(Array.prototype.isPrototypeOf(obj1), 
                     Array.prototype.isPrototypeOf(obj2),
                     Array.prototype.isPrototypeOf(obj3)
                      ) //输出结果 false  true  false
   

4. 判断子对象的构造函数是不是Array

   var obj1={}; 
        var obj2=[1,2,3]
        var obj3=new  Date()
      //  判断子对象的构造函数是不是Array
      console.log(obj1.constructor==Array,
      obj2.constructor==Array,
      obj3.constructor==Array)
        // false  true  false

注意: 这里子对象的constructor 是继承父对象的constructor 并不是子对象里面有的

5. 用instanceof 判断

 var obj1={}; 
        var obj2=[1,2,3]
        var obj3=new  Date()
      //   对象是不是Array 的一个实例 返回值是布尔值
      console.log(obj1 instanceof  Array)
      console.log(obj2 instanceof  Array)
      console.log(obj3 instanceof  Array)

6. 查找对象的class 属性

   var obj1={}; 
        var obj2=[1,2,3]
        var obj3=/\d/
          //   判断对象的class 属性   这个在Object的原型对象 的toString()的第二个参数就是这个对象刚开始的类型
         //     一定要加call  不加了 因为每个对象的构造函数重写过toString()
     console.log(Object.prototype.toString.call(obj1)===[object Array])
     console.log(Object.prototype.toString.call(obj2)===[object Array])
     console.log(Object.prototype.toString.call(obj3)===[object Array])

// 判断对象的class 属性 这个在Object的原型对象 的toString()的第二个参数就是这个对象刚开始的类型
// 一定要加call 不加了 因为每个对象的构造函数重写过toString()
call 的原理是啥 替换Function原型对象中toString中的this 原本指的 Object 的实例 现在被转换成你所要检测的对象 因为原型对象中的toString() 返回的第二个参数就是对象的class属性 这是对象刚出生就定义的

7. 用Array.isArray() 判断

 var  obj1=[1,2,3,4]
      var obj2={}
     console.log(Array.isArray(obj1))//true
     console.log(Array.isArray(obj2))//false

猜你喜欢

转载自blog.csdn.net/suandfei/article/details/102416473