【问题标题】:Difference between array and object in javascript? or Array Vs Objectjavascript中数组和对象的区别?或数组与对象
【发布时间】:2011-12-09 20:04:04
【问题描述】:

js中typeof不能派上用场的数组和对象如何识别?

 var arr = [], ob = {};

由于js中的一切都是对象,

if(typeof arr == typeof ob)  => returns true

我想要一个运算符或...,它会告诉我变量是一个数组。然后我可以只对数组对象使用数组函数。这怎么可能?

【问题讨论】:

    标签: javascript


    【解决方案1】:
    var arr = [], ob = {};
    

    由于js中的一切都是对象,即使**Array是一个Object,而是一个Array类的实例

    if(typeof arr == typeof ob)  => returns true as Both are **Objects
    

    那么,你将如何识别对象。

    这就是 instanceof 操作符派上用场的地方,要确定它是否是一个数组,您可以添加一个额外的检查 cde:

    if(arr instanceof Object && arr instanceof Array) => returns true 
    if(ob instanceof Object && ob instanceof Array) => returns false 
    

    【讨论】:

    • @alex 哦,我明白了。它的出路是什么?
    • @AngelinNadar 使用Object.prototype.toString.call() 或新的isArray()
    【解决方案2】:

    您可以使用 Array.isArray() 方法来检查变量是否为数组。

    var myArray = [1,2,3,4,5];
    console.log(Array.isArray(myArray));
    

    是的

    【讨论】:

      【解决方案3】:

      在众多简单/复杂的比较中,一个区别是:

      var arr = []; # arr.length => 0

      var obj = {}; # obj.length => undefined

      【讨论】:

      • 赞成,因为您为了清楚起见不厌其烦地标记了 cmets。更重要的是,您的回答简单明了。
      • 这在大多数情况下都有效。唯一的 egde 情况是当您有带有 length 键的对象时。 let obj = { length: 11 }; // obj.length => 11
      【解决方案4】:

      有多种区分数组和对象的方法,上面已经提到了一些我想补充一下上面的答案。

      第一种方法 使用长度进行区分,长度属性存在于数组上但不存在于对象上

       var arr = [1,2,3];  arr.length => 3
      
       var obj = {name: 'name'}; obj.length => undefined
      

      注意:当有人像下面这样声明对象时,这种方法会失败,只有当我们确定不会得到任何具有长度属性的对象时,我们才能使用这种方法

      var rectangle = {length: 50, width: 50}; rectangle.length => 50
      

      第二种方法 使用实例数组

      var arr = [1,2,3]; arr instanceof Array => true
      var obj = {name: 'name'}; ojb instanceof Array => false 
      

      第三种方法 使用 Array.isArray,这是最可取的方法,现在大多数浏览器都支持

      注意:Array.isArray 优于 instanceof,因为它有效 通过 iframe。

      Array.isArray(arr) => true
      true
      Array.isArray(obj) => false
      

      如果你想支持ie 8浏览器使用Object.prototype.toString 我们可以为 8 编写 polyfill

      if (!Array.isArray) {
      Array.isArray = function(arg) {
      return Object.prototype.toString.call(arg) === '[object Array]';
      };
      }
      
      Object.prototype.toString.call(arr); =>"[object Array]"
      Object.prototype.toString.call(obj); =>"[object Object]"
      

      参考:isArray

      【讨论】:

        猜你喜欢
        • 2015-06-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-13
        • 2011-12-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多