如何在JavaScript中检查变量是否为数组?
if (variable.constructor == Array)
如何在JavaScript中检查变量是否为数组?
if (variable.constructor == Array)
当前回答
通用解决方案如下:
Object.prototype.toString.call(obj)=='[object Array]'
从ECMAScript 5开始,正式的解决方案是:
Array.isArray(arr)
此外,对于旧的JavaScript库,您可以找到以下解决方案,尽管它不够准确:
var is_array = function (value) {
return value &&
typeof value === 'object' &&
typeof value.length === 'number' &&
typeof value.splice === 'function' &&
!(value.propertyIsEnumerable('length'));
};
解决方案来自http://www.pixelstech.net/topic/85-How-to-check-whether-an-object-is-an-array-or-not-in-JavaScript
其他回答
代码引用自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);};
有多种解决方案都有其独特之处。本页提供了一个很好的概述。一种可能的解决方案是:
function isArray(o) {
return Object.prototype.toString.call(o) === '[object Array]';
}
如果您只处理EcmaScript 5及以上版本,那么可以使用内置的Array.isArray函数
例如。,
Array.isArray([]) // true
Array.isArray("foo") // false
Array.isArray({}) // false
我已经创建了一小段代码,它可以返回真正的类型。
我还不确定性能,但这是一种正确识别类型的尝试。
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,都欢迎进一步的改进。
对于那些编码高尔夫的人来说,这是一个字符最少的不可靠测试:
function isArray(a) {
return a.map;
}
这通常在遍历/展平层次结构时使用:
function golf(a) {
return a.map?[].concat.apply([],a.map(golf)):a;
}
input: [1,2,[3,4,[5],6],[7,[8,[9]]]]
output: [1, 2, 3, 4, 5, 6, 7, 8, 9]