你如何检查一个变量是否是JavaScript中的数组?
这个问题在这里已经有了答案:
有几种检查变量是否是数组的方法。 最好的解决方案就是你选择的那个。
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?