为什么Array.isArray不能用于类型化数组?



我在新的m1 macbook pro上使用ChromeVersion 101.0.4951.64 (Official Build) (arm64)

是预期行为吗?Array.isArray(new Float32Array([0, 1, 2]))

返回false?

console.log(Array.isArray(new Float32Array([1, 2, 3])));

typedarray不是数组。

console.log(new Uint32Array instanceof Array)

对应于typedarray的Array.isArray()ArrayBuffer.isView():

const typed = new Float32Array(1024);
const arr = new Array(1024);
console.log(Array.isArray(typed));      // false
console.log(Array.isArray(arr));        // true
console.log(ArrayBuffer.isView(typed)); // true
console.log(ArrayBuffer.isView(arr));   // false

的特殊性,它也将返回true的DataView对象。

类型化数组在技术上不是数组,它们是TypedArrays,并且有自己的类型:

let floatArr = new Float32Array();
console.log(Object.prototype.toString.call(floatArr));
console.log(Object.prototype.toString.call([]));

根据MDN web docs:

JavaScript类型数组是类数组对象

但是,类型化数组的不能与普通数组相混淆,因为在类型化数组上调用Array.isArray()将返回false

最新更新