JavaScript 类型化数组参考
JavaScript 类型化数组
在 Javascript 中,类型化数组是二进制数据的类似数组的缓冲区。
JavaScript 中没有名为 TypedArray 的属性或对象,但可以将属性和方法与类型化数组对象一起使用
类型化数组对象
对象 | 数据类型 | 范围 | 试一试 |
---|---|---|---|
Int8Array | 带符号整数(字节) | -128/127 | 试一试 » |
Uint8Array | 无符号整数(八位字节) | 0/255 | 试一试 » |
Uint8ClampedArray | 无符号整数(八位字节) | 0/255 | 试一试 » |
Int16Array | 短整数 | -32768/32767 | 试一试 » |
Uint16Array | 无符号短整数 | 0/65535 | 试一试 » |
Int32Array | 带符号长整数 | -231/231-1 | 试一试 » |
Uint32Array | 无符号长整数 | 0/232 | 试一试 » |
Float32Array | 浮点数 - 7 位有效数字 | 1.2x10-38/3.4x1038 | 试一试 » |
Float64Array | 双精度浮点数 - 16 位有效数字 | 5.0x10-324/1.8x10308 | 试一试 » |
BigInt64Array | 大整数 | -263/263-1 | 试一试 » |
BigUint64Array | 大无符号整数 | 0/264 | 试一试 » |
注意
类型化数组不是数组。
isArray() 在类型化数组上返回 false。
许多数组方法(如 push 和 pop)不受类型化数组支持。
类型化数组是用于在内存中存储二进制数据的类似数组的对象。
类型化数组方法和属性
方法/属性 | 描述 | 试一试 |
---|---|---|
BYTES_PER_ELEMENT | 用于计算存储一个元素所用字节数的属性 | 试一试 » |
fill() | 用一个值填充所有元素 | 试一试 » |
find() | 返回满足条件的第一个元素 | 试一试 » |
name | 返回类型化数组的名称 | 试一试 » |
of() | 从数组创建类型化数组的方法 | 试一试 » |
some() | 如果一个元素满足条件,则返回 true | 试一试 » |
Uint8Array 与 Uint8ClampedArray
Uint8Array 和 Uint8ClampedArray 之间的区别在于如何添加值。
如果您将 Uint8ClampedArray 中的一个元素设置为 0-255 范围之外的值,它将默认为 0 或 255。
类型化数组将只取值的第一个 8 位。
类型化数组的优势
类型化数组提供了一种像 C 中的数组一样高效地处理二进制数据的方法。
类型化数组是原始内存,因此 JavaScript 可以直接将它们传递给任何函数,而无需将数据转换为其他表示形式。
对于将数据传递给可以使用原始二进制数据的函数(计算机游戏、WebGL、Canvas、文件 API、媒体 API),类型化数组的效率明显高于普通数组。
支持类型化数组的浏览器 API
Fetch API 示例
fetch(url)
.then(request => request.arrayBuffer())
.then(arrayBuffer =>...);
Canvas 示例
const canvas = document.getElementById('my_canvas');
const context = canvas.getContext('2d');
const imageData = context.getImageData(0, 0, canvas.width, canvas.height);
const uint8ClampedArray = imageData.data;
浏览器支持
typedArray
是 ECMAScript6 (ES6) 的一个特性。
ES6 (JavaScript 2015) 自 2017 年 6 月起已在所有现代浏览器中得到支持
Chrome 51 | Edge 15 | Firefox 54 | Safari 10 | Opera 38 |
2016 年 5 月 | 2017 年 4 月 | 2017 年 6 月 | 2016 年 9 月 | 2016 年 6 月 |
typedArray
在 Internet Explorer 中不受支持。