如何在JavaScript中检查变量是否为数组?
if (variable.constructor == Array)
如何在JavaScript中检查变量是否为数组?
if (variable.constructor == Array)
当前回答
有多种解决方案都有其独特之处。本页提供了一个很好的概述。一种可能的解决方案是:
function isArray(o) {
return Object.prototype.toString.call(o) === '[object Array]';
}
其他回答
我刚想到的:
if(项目长度)//这是一个数组其他的//不是数组
代码引用自https://github.com/miksago/Evan.js/blob/master/src/evan.js
var isArray = Array.isArray || function(obj) {
return !!(obj && obj.concat && obj.unshift && !obj.callee);};
由于.length属性对于javascript中的数组是特殊的,因此可以简单地说
obj.length === +obj.length // true if obj is an array
Undercorejs和其他几个库使用这个简单的技巧。
有几种方法可以检查变量是否为数组。最好的解决方案是您选择的解决方案。
variable.constructor === Array
这是Chrome上最快的方法,很可能是所有其他浏览器。所有数组都是对象,因此检查构造函数属性是JavaScript引擎的快速过程。
如果在查找对象属性是否为数组时遇到问题,则必须首先检查该属性是否存在。
variable.prop && variable.prop.constructor === Array
其他一些方式包括:
Array.isArray(variable)
使用Chrome 75更新2019年5月23日,向@AnduAndrici喊话,感谢他让我再次提出他的问题在我看来,这最后一个是最丑的,也是速度最慢的。第一个例子是大约1/5的速度。这家伙速度慢了2-5%,但很难说。坚固耐用!结果给我留下了深刻印象。Array.prototype实际上是一个数组。你可以在这里了解更多https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray
variable instanceof Array
该方法的运行速度约为第一个示例的1/3。如果你只关注漂亮的代码而不太关注性能,那么它仍然很坚固,看起来更干净。注意,检查数字不起作用,因为变量instanceof Number总是返回false。更新:instanceof现在的速度是2/3!
所以还有一个更新
Object.prototype.toString.call(variable) === '[object Array]';
这家伙是检查阵列最慢的。然而,这是一个一站式商店为任何类型的你正在寻找。然而,由于您要查找数组,所以只需使用上面最快的方法。
此外,我进行了一些测试:http://jsperf.com/instanceof-array-vs-array-isarray/35所以玩得开心一点,看看吧。
注意:@EscapeNetscape在jsperf.com关闭时创建了另一个测试。http://jsben.ch/#/QgYAV我想确保jsperf恢复在线时,原始链接保持不变。
如果使用的是Angular,则可以使用Angular.isArray()函数
var myArray = [];
angular.isArray(myArray); // returns true
var myObj = {};
angular.isArray(myObj); //returns false
http://docs.angularjs.org/api/ng/function/angular.isArray