TypedArray
Baseline
Widely available
*
This feature is well established and works across many devices and browser versions. It’s been available across browsers since 2015年7月.
* Some parts of this feature may have varying levels of support.
一个 TypedArray 对象描述了底层二进制数据缓冲区的类数组视图。没有称为 TypedArray
的全局属性,也没有直接可用的 TypedArray
构造函数。但是,有很多不同的全局属性,其值是指定元素类型的类型化数组构造函数,如下所列。在接下来的页面,你将找到可以与包含任意类型元素的任意类型化数组一起使用的常见属性和方法。
尝试一下
// Create a TypedArray with a size in bytes
const typedArray1 = new Int8Array(8);
typedArray1[0] = 32;
const typedArray2 = new Int8Array(typedArray1);
typedArray2[1] = 42;
console.log(typedArray1);
// Expected output: Int8Array [32, 0, 0, 0, 0, 0, 0, 0]
console.log(typedArray2);
// Expected output: Int8Array [32, 42, 0, 0, 0, 0, 0, 0]
描述
TypedArray
构造函数(通常归类为 %TypedArray%
,表示它的“内在性”,因为它与任何 JavaScript 程序暴露出的全局对象不对应)是所有 TypedArray
子类的通用父类。将 %TypedArray%
作为一个“抽象类”,其为所有类型化数组的子类提供了实用方法的通用接口。该构造函数没有直接暴露:没有全局的 TypedArray
属性。它只能通过Object.getPrototypeOf(Int8Array)
及类似方式访问。
当创建 TypedArray
子类(例如 Int8Array
)的实例时,在内存的中会创建数组缓冲区,或者,如果将 ArrayBuffer
对象作为构造参数,则使用该 ArrayBuffer
。缓冲区地址被保存为实例的内部属性并且所有的 %TypedArray%.prototype
方法都将基于数组缓冲区地址设置和获取值。
TypedArray 对象
类型 | 值范围 | 字节大小 | 描述 | Web IDL 类型 | 等价的 C 类型 |
---|---|---|---|---|---|
Int8Array |
-128 到 127 | 1 | 8 位有符号整型(补码) | byte |
int8_t |
Uint8Array |
0 到 255 | 1 | 8 位无符号整型 | octet |
uint8_t |
Uint8ClampedArray |
0 到 255 | 1 | 8 位无符号整型(一定在 0 到 255 之间) | octet |
uint8_t |
Int16Array |
-32768 到 32767 | 2 | 16 位有符号整型(补码) | short |
int16_t |
Uint16Array |
0 到 65535 | 2 | 16 位无符号整型 | unsigned short |
uint16_t |
Int32Array |
-2147483648 到 2147483647 | 4 | 32 位有符号整型(补码) | long |
int32_t |
Uint32Array |
0 到 4294967295 | 4 | 32 位无符号整型 | unsigned long |
uint32_t |
Float32Array |
-3.4E38 到 3.4E38 并且 1.2E-38 是最小的正数 |
4 | 32 位 IEEE 浮点数(7 位有效数字,例如 1.234567 ) |
unrestricted float |
float |
Float64Array |
-1.8E308 到 1.8E308 并且 5E-324 是最小的正数 |
8 | 64 位 IEEE 浮点数(16 位有效数字,例如 1.23456789012345 ) |
unrestricted double |
double |
BigInt64Array |
-263 到 263 - 1 | 8 | 64 位有符号整型(补码) | bigint |
int64_t (signed long long) |
BigUint64Array |
0 到 264 - 1 | 8 | 64 位无符号整型 | bigint |
uint64_t (unsigned long long) |
值编码与标准化
所有的类型化数组都是基于 ArrayBuffer
进行操作的,你可以借此观察到每个元素的确切字节表示,因此二进制格式中的数字编码方式具有重要意义。
- 无符号整数数组(
Uint8Array
、Uint16Array
、Uint32Array
和BigUint64Array
)直接以二进制形式存储数字。 - 有符号整数数组(
Int8Array
、Int16Array
、Int32Array
和BigInt64Array
)使用二进制补码存储数字。 - 浮点数组(
Float32Array
和Float64Array
)使用 IEEE 754浮点格式存储数字。Number
参考文档中有关于确切格式的更多信息。JavaScript 数字默认使用双精度浮点格式,这与Float64Array
相同。Float32Array
将 23(而不是 52)位用于尾数,以及 8(而不是 11)位用于指数。请注意,规范要求所有的