键入的数组和普通数组

时间:2014-03-02 23:09:38

标签: javascript arrays

由于类型化数组只是具有类型值的普通数组,因此它们也应被视为“数组”。但是,当我测试类型化数组是否为数组时,它返回false。例如:

var arr = new Int32Array(3);
Array.isArray(arr);            //false

Array.isArray仅检查arr是否恰好是Array类型的对象吗?如何测试arr是否为数组,无论是否键入?

4 个答案:

答案 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);