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

if (variable.constructor == Array)

当前回答

我刚想到的:

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

其他回答

我刚想到的:

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

我喜欢Brian的回答:

function is_array(o){
    // make sure an array has a class attribute of [object Array]
    var check_class = Object.prototype.toString.call([]);
    if(check_class === '[object Array]')    {
        // test passed, now check
        return Object.prototype.toString.call(o) === '[object Array]';
    } else{
        // may want to change return value to something more desirable
        return -1; 
    }
}

但你可以这样做:

return Object.prototype.toString.call(o) === Object.prototype.toString.call([]);

来自w3schools:

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

我认为使用myObj.constructor==Object和myArray.constructor==Array是最好的方法。它几乎比使用toString()快20倍。如果您使用自己的构造函数扩展对象,并希望这些创建也被视为“对象”,那么这是行不通的,但否则它会更快。typeof与构造函数方法一样快,但typeof[]=='object'返回true,这通常是不可取的。http://jsperf.com/constructor-vs-tostring

需要注意的一点是null.constructor将抛出一个错误,因此如果您可能要检查null值,则必须首先执行以下操作:(testThing!==null){}

我在这里尝试了大多数解决方案。但没有一个有效。然后我提出了一个简单的解决方案。希望它能帮助某人并节省他们的时间。

if(variable.constructor != undefined && variable.constructor.length > 0) {
        /// IT IS AN ARRAY
} else {
       /// IT IS NOT AN ARRAY
}