找出什么是类型化数组以及如何使用它们
JavaScript提供了8种类型的数组类型。
Int8Array8位有符号整数的数组Int16Array16位有符号整数的数组Int32Array32位有符号整数的数组Uint8Array8位无符号整数的数组Uint16Array16位无符号整数的数组Uint32Array一个32位无符号整数阵列Float32Array一个32位浮点数数组Float64Array一个64位浮点数的数组
所有这些都是 ArrayBufferView实例。
一个类型化的数组本质上是对一个 ArrayBuffer的视图,其中每个项目都有相同的大小和类型。
DataView是对ArrayBuffer的另一种看法,但在这种情况下,数组中的项目可以有不同的大小和类型。
下面是一个如何创建8位有符号整数阵列的例子。
const a = new Int8Array()
你可以预先分配n个字节。
const bytes = 1024
const a = new Int8Array(bytes)
主要用途是允许查看ArrayBuffer,它本身是不透明的(我们不能检查其内容)。
下面是我们如何做的。
//we got this `buffer` ArrayBuffer
const a = new Int8Array(buffer)
那些类型化的数组是类似于数组的,所以现在我们可以通过通常的数组访问技术来检查缓冲区的内容,而且我们可以访问很多方法和属性,包括map(),reduce() 等。
类型化数组的主要使用情况是与WebGL、Web Audio或 画布API.一些WebGL函数希望使用类型化数组,因为它们比普通的JavaScript数组更具有性能。
有一点需要注意的是,类型化数组不能让我们控制字节数:它使用平台的字节顺序。一般来说,这很好,因为正如我们所说,主要的使用情况是在本地使用数组,使用其中一个多媒体API。另外,大多数消费类计算机都使用小恩典(little endian),因为英特尔使用该惯例。但是,如果你在一个使用大 endian 的系统上传输 Typed Array 的数据,数据可能会被严重编码,因此是无效的。
如果你需要这种对字节数的控制,可以使用DataView来代替。