由于类型化数组只是具有类型值的普通数组,因此它们也应被视为“数组”。但是,当我测试类型化数组是否为数组时,它返回false
。例如:
var arr = new Int32Array(3);
Array.isArray(arr); //false
Array.isArray
仅检查arr
是否恰好是Array
类型的对象吗?如何测试arr
是否为数组,无论是否键入?
答案 0 :(得分:1)
Typed Arrays是与数组截然不同的野兽。数组是泛型集合,带有大量辅助方法,用于对这些集合进行操作。
Typed Arrays主要用于帮助浏览器版本的OpenGL(虽然它们显然有其他用途)。
尝试拨打typedInt8Array.forEach()
...
他们不是一回事。
因此,如果您想要一个检查变量/属性是数组还是类型化数组的函数,那么您必须手动检查每个instanceof
的{{1}}。
答案 1 :(得分:0)
我偏爱这个伎俩:
obj.length === +obj.length; // true if it's an array
由于JavaScript数组具有特殊的长度属性,因此这是一种非常安全的方法,除非你有手动定义了长度属性的对象。
答案 2 :(得分:0)
由于Typed Arrays仍有长度属性,旧技巧
obj.length === +obj.length
仍然有效。
这意味着length是一个数字属性(+ v将var转换为数字,所以如果它在转换后仍然是===,那么它就是一个以数字开头的数字)。
答案 3 :(得分:0)
这是我提出的解决方案:
isArray = /Array/.test(arr.constructor.name);