如何在JavaScript中检查变量是否为数组?
if (variable.constructor == Array)
如何在JavaScript中检查变量是否为数组?
if (variable.constructor == Array)
当前回答
当我发布这个问题时,我使用的JQuery版本没有包含isArray函数。如果是这样的话,我可能会使用它,相信该实现是执行这种特定类型检查的最佳浏览器独立方式。
因为JQuery现在确实提供了这个功能,所以我会一直使用它。。。
$.isArray(obj);
(自1.6.2版起)它仍然使用以下形式的字符串比较来实现
toString.call(obj) === "[object Array]"
其他回答
我用的是这行代码:
if (variable.push) {
// variable is array, since AMAIK only arrays have push() method.
}
当我发布这个问题时,我使用的JQuery版本没有包含isArray函数。如果是这样的话,我可能会使用它,相信该实现是执行这种特定类型检查的最佳浏览器独立方式。
因为JQuery现在确实提供了这个功能,所以我会一直使用它。。。
$.isArray(obj);
(自1.6.2版起)它仍然使用以下形式的字符串比较来实现
toString.call(obj) === "[object Array]"
有多种解决方案都有其独特之处。本页提供了一个很好的概述。一种可能的解决方案是:
function isArray(o) {
return Object.prototype.toString.call(o) === '[object Array]';
}
我认为使用myObj.constructor==Object和myArray.constructor==Array是最好的方法。它几乎比使用toString()快20倍。如果您使用自己的构造函数扩展对象,并希望这些创建也被视为“对象”,那么这是行不通的,但否则它会更快。typeof与构造函数方法一样快,但typeof[]=='object'返回true,这通常是不可取的。http://jsperf.com/constructor-vs-tostring
需要注意的一点是null.constructor将抛出一个错误,因此如果您可能要检查null值,则必须首先执行以下操作:(testThing!==null){}
代码引用自https://github.com/miksago/Evan.js/blob/master/src/evan.js
var isArray = Array.isArray || function(obj) {
return !!(obj && obj.concat && obj.unshift && !obj.callee);};