【问题标题】:Distinguish between array and hash in javascript with typeof() [duplicate]使用 typeof() 区分 javascript 中的数组和哈希 [重复]
【发布时间】:2011-07-27 13:18:57
【问题描述】:

可能重复:
In javascript how can we identify whether an object is a Hash or an Array?

在 JavaScript 中

typeof([])

和

typeof({})

两者都返回“对象”。

如何在 Javascript 中可靠地区分数组和关联数组?

我曾想过测试有问题的对象以查看它是否具有“长度”属性(表明它将是一个数组),但是下面的内容也将被视为一个数组:

{length:5}

【问题讨论】:

    标签: javascript


    【解决方案1】:

    现代浏览器内置了Array.isArray。

    对于较旧的浏览器,您可以测试该功能并在必要时添加它。

    if( typeof Array.isArray !== 'function' ) {
        Array.isArray = function( arr ) {
            return Object.prototype.toString.call( arr ) === '[object Array]';
        };
    }
    
    alert( Array.isArray( [] ) );
    

    编辑:

    Array.isArray is part of ECMAScript 5:

    15.4.3.2 Array.isArray(arg)

    isArray 函数接受一个参数 arg,如果参数是类内部属性为“Array”的对象,则返回布尔值 true;否则返回false。采取以下步骤:

    1. 如果 Type(arg) 不是 Object,则返回 false。
    2. 如果 arg 的 [[Class]] 内部属性的值为“Array”,则返回 true。
    3. 返回 false。

    【讨论】:

      【解决方案2】:

      一个好主意是检查内部[[CClass]] 值。为此,您需要调用Object.prototype.toString:

      var toStr = Object.prototype.toString;
      
      toStr.call([]);  // === [object Array]
      toStr.call({});  // === [object Object]
      

      【讨论】:

        【解决方案3】:

        Javascript 中不存在关联数组。

        数组只能有数字键。如果你访问一个字符串键,你实际上是在使用一个快捷方式,它完全等同于对象表示法。

        http://www.quirksmode.org/js/associative.html

        http://andrewdupont.net/2006/05/18/javascript-associative-arrays-considered-harmful/

        【讨论】:

        • 呃,我想你已经搞反了。普通的 JS 对象是关联数组。它是 javascript 中不存在的真实数组。 js 中的 Array 是一个带有糖的对象,使它看起来像一个真正的数组(最值得注意的是一个长度属性,它只返回 1 + 对象中存储的最高数值字段)。
        猜你喜欢
        • 2011-03-14
        • 2019-05-21
        • 2013-01-28
        • 2015-02-20
        • 1970-01-01
        • 2013-07-06
        • 2020-10-11
        • 2021-02-24
        • 2014-11-13
        相关资源
        最近更新 更多