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

if (variable.constructor == Array)

当前回答

如果您只处理EcmaScript 5及以上版本,那么可以使用内置的Array.isArray函数

例如。,

Array.isArray([])    // true
Array.isArray("foo") // false
Array.isArray({})    // false

其他回答

如果您只处理EcmaScript 5及以上版本,那么可以使用内置的Array.isArray函数

例如。,

Array.isArray([])    // true
Array.isArray("foo") // false
Array.isArray({})    // false

我用的是这行代码:

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

通用解决方案如下:

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

从ECMAScript 5开始,正式的解决方案是:

Array.isArray(arr)

此外,对于旧的JavaScript库,您可以找到以下解决方案,尽管它不够准确:

var is_array = function (value) {
    return value &&
    typeof value === 'object' &&
    typeof value.length === 'number' &&
    typeof value.splice === 'function' &&
    !(value.propertyIsEnumerable('length'));
};

解决方案来自http://www.pixelstech.net/topic/85-How-to-check-whether-an-object-is-an-array-or-not-in-JavaScript

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

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

$.isArray(obj);

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

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

在Crockford的JavaScript The Good Parts中,有一个函数可以检查给定的参数是否为数组:

var is_array = function (value) {
    return value &&
        typeof value === 'object' &&
        typeof value.length === 'number' &&
        typeof value.splice === 'function' &&
        !(value.propertyIsEnumerable('length'));
};

他解释道:

首先,我们问这个价值是否真实。我们这样做是为了拒绝空值和其他错误值。第二,我们询问值的类型是否为“object”。这对于对象、数组和(奇怪的)null都是正确的。第三,我们询问该值是否具有数字的长度属性。对于数组总是如此,但对于对象通常不是如此。第四,我们询问该值是否包含拼接方法。这同样适用于所有阵列。最后,我们问长度属性是否可枚举(长度是否由for in循环产生?)。这对于所有数组都是错误的。这是我发现的最可靠的阵列测试。不幸的是,它如此复杂。