如何在JavaScript中检查变量是否为数组?

if (variable.constructor == Array)

当前回答

代码引用自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);};

其他回答

当我发布这个问题时,我使用的JQuery版本没有包含isArray函数。如果是这样的话,我可能会使用它,相信该实现是执行这种特定类型检查的最佳浏览器独立方式。

因为JQuery现在确实提供了这个功能,所以我会一直使用它。。。

$.isArray(obj);

(自1.6.2版起)它仍然使用以下形式的字符串比较来实现

toString.call(obj) === "[object Array]"

由于.length属性对于javascript中的数组是特殊的,因此可以简单地说

obj.length === +obj.length // true if obj is an array

Undercorejs和其他几个库使用这个简单的技巧。

有多种解决方案都有其独特之处。本页提供了一个很好的概述。一种可能的解决方案是:

function isArray(o) {
  return Object.prototype.toString.call(o) === '[object Array]'; 
}

我想我会为那些可能已经在脚本中使用Undercore.js库的人添加另一个选项。Undercore.js有一个isArray()函数(请参见http://underscorejs.org/#isArray).

_.isArray(object) 

如果对象是数组,则返回true。

我用的是这行代码:

if (variable.push) {
   // variable is array, since AMAIK only arrays have push() method.
}