Skip to content

Latest commit

 

History

History
50 lines (34 loc) · 2.74 KB

类型化数组.md

File metadata and controls

50 lines (34 loc) · 2.74 KB

JavaScript 类型化数组

JavaScript 提供了 8 种类型化数组(Typed Arrays)类型:

  • Int8Array 8 位有符号整数数组
  • Int16Array 16 位有符号整数数组
  • Int32Array 32 位有符号整数数组
  • Uint8Array 8 位无符号整数数组
  • Uint16Array 16 位无符号整数数组
  • Uint32Array 32 位无符号整数数组
  • Float32Array 32 位浮点数数组
  • Float64Array 64 位浮点数数组
  • Uint8ClampedArray 8 位无符号整型固定数组
  • BigInt64Array 64 位有符号整数数组
  • BigUint64Array 64 位无符号整型数组

它们都是 ArrayBufferView 实例。

类型化数组本质上是 ArrayBuffer 的视图,其中每个项都具有相同的大小和类型。

DataViewArrayBuffer 的另一个视图,但在这种情况下,数组中的项可以具有不同的大小和类型。

下面是一个如何创建 8 位有符号整数数组的示例:

const a = new Int8Array()

您可以预先分配 n 个字节:

const bytes = 1024
const a = new Int8Array(bytes)

它的主要用途是允许查看 ArrayBuffer,它本身是不透明的(我们无法检查其内容)。

以下是我们的做法:

const a = new Int8Array(buffer)

这些类型化数组类似于数组,因此现在我们可以通过常用的数组访问技术检查缓冲区的内容,并且我们可以访问许多方法和属性,包括 map()reduce() 等等。

类型化数组的主要用例是与 WebGLWeb AudioCanvas API 一起使用。一些 WebGL 函数需要类型化数组,因为它们比常规 JavaScript 数组的性能更好。

需要记住的一点是,类型化数组不允许我们控制字节顺序:它使用平台的字节顺序。一般来说,这很好,因为我们所说的主要用例是使用一个多媒体 API 在本地使用数组。此外,大多数消费类计算机使用小字节序(Little-Endian),因为 Intel 使用这种约定。但是,如果您在使用大字节序(Big-Endian) 的系统上传输类型化数组的数据,则数据可能编码错误,因此无效。

如果您需要这种对字节顺序的控制,请改用 DataView