0

我想知道函数中变量的类型。所以,我使用typeof并喜欢这样:

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

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

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

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

4

4 回答 4

6

数组是一个对象。您可以测试对象是否为数组,如下所示:

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

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

function isArray(a)
{
    return Object.prototype.toString.apply(a) === '[object Array]';
}
于 2012-04-29T00:13:39.423 回答
3

检查构造函数:

[].constructor == Array  //true
{}.constructor == Object  //true
于 2012-04-29T00:14:00.720 回答
1

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

Array.isArray( maybeArray );

如果担心兼容性,您可以使用Underscore.jsjQuery

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

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

于 2014-02-12T12:46:52.750 回答
0

这很简单。尝试类似的东西

var to = {}.toString;
alert(to.call([])); //[object Array]
alert(to.call({})); //[object Object]
于 2012-04-29T00:12:30.713 回答