我想知道函数中放入的变量的类型。所以,我使用typeof
并且像这样:
randomFunctionName: function(obj){
switch(typeof obj){
case "object":
//Something
case "text":
//Something else
}
}
但问题是,我无法判断obj
是数组还是对象,因为
typeof [] === "object" //true
typeof {} === "object" //true
那么,我怎么能把他们分开呢?它们之间有什么区别吗?
答案 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.js或jQuery:
_.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]