如何判断它是对象还是数组?

时间:2012-04-29 00:08:12

标签: javascript typeof

我想知道函数中放入的变量的类型。所以,我使用typeof并且像这样:

randomFunctionName: function(obj){
    switch(typeof obj){
        case "object":
           //Something
        case "text":
            //Something else
    }
}

但问题是,我无法判断obj是数组还是对象,因为

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

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

4 个答案:

答案 0 :(得分:6)

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

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

您可以将其包装成一个函数,如下所示:

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

答案 1 :(得分:3)

检查构造函数:

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

答案 2 :(得分:1)

从ECMAScript 5开始,您可以使用本机方法:

Array.isArray( maybeArray );

如果您要考虑兼容性,可以使用Underscore.jsjQuery

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

这种实用程序也存在于AngularJS中。

答案 3 :(得分:0)

这很简单。尝试像

这样的东西
var to = {}.toString;
alert(to.call([])); //[object Array]
alert(to.call({})); //[object Object]