Skip to content

类型化数组

类型化数组(Typed Arrays)是 JavaScript 中用于处理二进制数据的对象。

它允许你通过一个缓冲区(ArrayBuffer)创建视图,这些视图可以用于操作该缓冲区的二进制数据。

类型化数组的目的就是为了在 JavaScript 中高效地处理诸如文件读取音频处理图像处理WebGL等需要直接操作原始二进制数据的场景。

类型化数组直接映射到计算机内存中的字节结构,数据以固定大小的数组类型存储和访问,不像普通的 Array 那样支持任意类型数据。因此类型化数组的操作通常比普通数组更快。

类型化数组视图

类型描述值范围字节数
Int8Array8位有符号整数-128 ~ 1271
Uint8Array8位无符号整数0 ~ 2551
Uint8ClampedArray8位无符号整数(值会被裁剪)0 ~ 2551
Int16Array16位有符号整数-32768 ~ 327672
Uint16Array16位无符号整数0 ~ 655352
Int32Array32位有符号整数-2147483648 ~ 21474836474
Uint32Array32位无符号整数0 ~ 42949672954
Float32Array32位浮点数-3.4E38~3.4E38 以及 1.2E-38(最小正数)4
Float64Array64位浮点数-1.8E308~1.8E308 以及 5E-324(最小正数)8
BigInt64Array64位有符号整数-2^63^ ~ 2^63^ - 18
BigUint64Array64位无符号整数0 ~ 2^64^ - 18

类型化数组

如上图所示,创建 16 个字节的缓冲区,Uint8Array 需要16 个元素(每个元素占1个字节),Uint16Array 需要 8 个元素(每个元素占2个字节),Uint32Array 需要 4 个元素(每个元素占4个字节),Float64Array 需要 2 个元素(每个元素占8个字节)。

使用步骤

  1. 创建一个 ArrayBuffer ,这是一个原始的二进制数据缓冲区:

    js
    // 创建 16 个字节的缓冲区
    const buffer = new ArrayBuffer(16)
  2. 基于 ArrayBuffer 创建类型化数组视图:

    js
    // 将缓冲区作为 16 位整数数组的视图
    const int16View = new Int16Array(buffer)

常用方法

常用方法:

方法作用
set设置数组中的元素
arr[0]通过索引访问数组元素
subArray返回一个新的类型化数组,[a, b) 左闭右开
copyWithin在数组中复制元素

常用属性:

属性作用
buffer返回数组所占用的字节长度
byteOffset返回数组在 ArrayBuffer 中的其实字节位置
js
const arr = new Uint8Array(4)
arr.set([10, 20, 30, 40])

const value = arr[2]              // 30
const subArr = arr.subarray(1, 3) // [20, 30]

const buffer = arr.buffer         // 4
const byteLength = arr.byteLength // 4
const startByte = arr.byteOffset  // 0

Released under the MIT License.