如何在JavaScript中检查变量是否为数组?
if (variable.constructor == Array)
如何在JavaScript中检查变量是否为数组?
if (variable.constructor == Array)
当前回答
我已经创建了一小段代码,它可以返回真正的类型。
我还不确定性能,但这是一种正确识别类型的尝试。
https://github.com/valtido/better-typeOf也在这里写了一些关于它的博客http://www.jqui.net/jquery/better-typeof-than-the-javascript-native-typeof/
它的工作原理与当前类型的类似。
var user = [1,2,3]
typeOf(user); //[object Array]
它认为它可能需要一些微调,并且考虑到一些事情,我没有遇到或测试它。因此,无论是性能方面的改进,还是错误地重新移植类型of,都欢迎进一步的改进。
其他回答
我喜欢Brian的回答:
function is_array(o){
// make sure an array has a class attribute of [object Array]
var check_class = Object.prototype.toString.call([]);
if(check_class === '[object Array]') {
// test passed, now check
return Object.prototype.toString.call(o) === '[object Array]';
} else{
// may want to change return value to something more desirable
return -1;
}
}
但你可以这样做:
return Object.prototype.toString.call(o) === Object.prototype.toString.call([]);
我想我会为那些可能已经在脚本中使用Undercore.js库的人添加另一个选项。Undercore.js有一个isArray()函数(请参见http://underscorejs.org/#isArray).
_.isArray(object)
如果对象是数组,则返回true。
这是一个老问题,但有同样的问题,我找到了一个非常优雅的解决方案,我想分享。
将原型添加到Array使其非常简单
Array.prototype.isArray = true;
现在,如果您有一个要测试的对象,看看它是否是一个数组,您只需要检查新属性
var box = doSomething();
if (box.isArray) {
// do something
}
isArray仅在其为数组时可用
您还可以使用:
if (value instanceof Array) {
alert('value is Array!');
} else {
alert('Not an array');
}
在我看来,这是一个非常优雅的解决方案,但对每个人来说都是自己的。
编辑:
截至ES5,现在还有:
Array.isArray(value);
但这将在旧浏览器上打破,除非您使用的是polyfills(基本上…IE8或类似)。
我在这里尝试了大多数解决方案。但没有一个有效。然后我提出了一个简单的解决方案。希望它能帮助某人并节省他们的时间。
if(variable.constructor != undefined && variable.constructor.length > 0) {
/// IT IS AN ARRAY
} else {
/// IT IS NOT AN ARRAY
}