How can I tell if it is an object or an array?
我想知道函数中变量的类型。所以,我用了
1 2 3 4 5 6 7 8 | randomFunctionName: function(obj){ switch(typeof obj){ case"object": //Something case"text": //Something else } } |
但问题是,我不知道
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] |