你如何检查一个变量是否是JavaScript中的数组?

这个问题在这里已经有了答案:

  • 检查对象是否是数组? 38个答案

  • 有几种检查变量是否是数组的方法。 最好的解决方案就是你选择的那个。

    variable.constructor === Array
    

    这是Chrome上最快的方法,并且很可能是所有其他浏览器。 所有数组都是对象,因此检查构造函数属性对于JavaScript引擎来说是一个快速过程。

    如果您在查找对象属性是否为数组时遇到问题,则必须先检查该属性是否存在。

    variable.prop && variable.prop.constructor === Array
    

    其他一些方法是:

    variable instanceof Array
    

    作为第一个例子,该方法的运行速度约为1/3。 如果你只是关于漂亮的代码而不是性能上的话,它仍然非常坚固,看起来更干净。 请注意,检查数字不起作用,因为variable instanceof Number始终返回false更新: instanceof现在以2/3的速度!

    Array.isArray(variable)
    

    最后一个在我看来是最丑的,而且是最慢的一个。 作为第一个例子,以约1/5的速度运行。 Array.prototype实际上是一个数组。 你可以在这里阅读更多关于它的信息https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray

    所以又一次更新

    Object.prototype.toString.call(variable) === '[object Array]';
    

    这家伙是尝试检查数组最慢的人。 不过,这是您寻找任何类型的一站式商店。 但是,由于您正在寻找一个数组,只需使用上面最快的方法。

    此外,我跑了一些测试:http://jsperf.com/instanceof-array-vs-array-isarray/33所以有一些乐趣,并检查出来。

    注意:由于jsperf.com关闭,@EscapeNetscape创建了另一个测试。 http://jsben.ch/#/QgYAV我想确保每当jsperf恢复在线时原始链接都会保留。


    你也可以使用:

    if (value instanceof Array) {
      alert('value is Array!');
    } else {
      alert('Not an array');
    }
    

    这对我来说似乎是一个非常优雅的解决方案,但是对于他自己来说。

    编辑:

    从ES5开始,现在还有:

    Array.isArray(value);
    

    但是,除非你使用polyfills(基本上...... IE8或类似的),否则这将在较旧的浏览器上打破。


    我注意到有人提到jQuery,但我不知道有一个isArray()函数。 事实证明,它是在1.3版本中添加的。

    jQuery按照Peter的说法来实现它:

    isArray: function( obj ) {
        return toString.call(obj) === "[object Array]";
    },
    

    已经对jQuery产生了很大的信心(特别是他们的跨浏览器兼容技术),我会升级到1.3版本并使用它们的功能(假设升级不会导致太多问题),或者直接在我的码。

    非常感谢您的建议。

    链接地址: http://www.djcxy.com/p/419.html

    上一篇: How do you check if a variable is an array in JavaScript?

    下一篇: adding custom functions into Array.prototype