关于javascript:如何判断它是对象还是数组?

How can I tell if it is an object or an array?

我想知道函数中变量的类型。所以,我用了typeof,就像这样:

1
2
3
4
5
6
7
8
randomFunctionName: function(obj){
    switch(typeof obj){
        case"object":
           //Something
        case"text":
            //Something else
    }
}

但问题是,我不知道obj是数组还是对象,因为

1
2
typeof [] ==="object"  //true
typeof {} ==="object"  //true

那么,我怎样才能把它们分开呢?他们之间有什么区别吗?


数组是一个对象。可以按如下方式测试对象是否为数组:

1
Object.prototype.toString.apply(value) === '[object Array]';

您可以将其概括为以下函数:

1
2
3
4
function isArray(a)
{
    return Object.prototype.toString.apply(a) === '[object Array]';
}


检查施工单位:

1
2
[].constructor == Array  //true
{}.constructor == Object  //true


由于ECMAScript 5,您可以使用本机方法:

1
Array.isArray( maybeArray );

如果考虑到兼容性,可以使用underline.js或jquery:

1
2
_.isArray( maybeArray ); // will use the native method if available
$.isArray( maybeArray );

这种效用也存在于安格拉尔语中。


这很简单。尝试一下

1
2
3
var to = {}.toString;
alert(to.call([])); //[object Array]
alert(to.call({})); //[object Object]