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

if (variable.constructor == Array)

当前回答

我刚想到的:

if(项目长度)//这是一个数组其他的//不是数组

其他回答

通过Crockford:

function typeOf(value) {
    var s = typeof value;
    if (s === 'object') {
        if (value) {
            if (value instanceof Array) {
                s = 'array';
            }
        } else {
            s = 'null';
        }
    }
    return s;
}

Crockford提到的主要失败是无法正确确定在不同上下文(例如窗口)中创建的数组。如果这还不够的话,该页面有一个更复杂的版本。

来自w3schools:

function isArray(myArray) {
    return myArray.constructor.toString().indexOf("Array") > -1;
}

如果使用的是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

这是一个老问题,但有同样的问题,我找到了一个非常优雅的解决方案,我想分享。

将原型添加到Array使其非常简单

Array.prototype.isArray = true;

现在,如果您有一个要测试的对象,看看它是否是一个数组,您只需要检查新属性

var box = doSomething();

if (box.isArray) {
    // do something
}

isArray仅在其为数组时可用

通用解决方案如下:

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