目录

JavaScript 类型数组参考

示例

const myArr = new Int8Array(10);
亲自试一试 »

JavaScript 类型数组

在 Javascript 中,类型化数组是类似数组的二进制数据缓冲区。

没有名为 TypedArray 的 JavaScript 属性或对象,但属性和方法可以与类型化数组对象一起使用:


类型化数组对象

Object Data Type Range 尝试一下
Int8Array Signed integer (byte) -128/127 尝试一下 »
Uint8Array Unsigned integer (octet) 0/255 尝试一下 »
Uint8ClampedArray Unsigned integer (octet) 0/255 尝试一下 »
Int16Array Short integer -32768/32767 尝试一下 »
Uint16Array Unsigned short integer 0/65535 尝试一下 »
Int32Array Signed long integer -231/231-1 尝试一下 »
Uint32Array Unsigned long integer 0/232 尝试一下 »
Float32Array Float - 7 significant digits 1.2x10-38/3.4x1038 尝试一下 »
Float64Array Double - 16 significant digits 5.0x10-324/1.8x10308 尝试一下 »
BigInt64Array Big signed integer -263/263-1 尝试一下 »
BigUint64Array Big unsigned integer 0/264 尝试一下 »

笔记

类型化数组不是数组。

类型化数组上的 isArray() 返回 false。

类型化数组不支持许多数组方法(如push 和pop)。

类型化数组是类似数组的对象,用于在内存中存储二进制数据。



类型化数组方法和属性

Method / Property Description 尝试一下
BYTES_PER_ELEMENT Property to count the number of bytes used to store one element 尝试一下 »
fill() Fill all elements with a value 尝试一下 »
find() Returns the first element that satisfies a condition 尝试一下 »
name Returns the name of the typed array 尝试一下 »
of() Method to create a typed array from an array 尝试一下 »
some() Reurns true if one element satisfies a condition 尝试一下 »

Uint8Array 与 Uint8ClampedArray

Uint8Array 和 Uint8ClampedArray 之间的区别在于如何添加值。

如果将 Uint8ClampedArray 中的一个元素设置为 0-255 范围之外的值,则它将默认为 0 或 255。

类型化数组仅采用值的前 8 位。


类型化数组的优点

类型化数组提供了一种像 C 语言中数组一样高效地处理二进制数据的方法。

类型化数组是原始内存,因此 JavaScript 可以将它们直接传递给任何函数,而无需将数据转换为另一种表示形式。

类型化数组比普通数组要快得多,用于将数据传递给可以使用原始二进制数据的函数(计算机游戏、WebGL、Canvas、文件 API、媒体 API)。


支持类型化数组的浏览器 API

获取 API 示例

fetch(url)
.then(request => request.arrayBuffer())
.then(arrayBuffer =>...);

画布示例

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):

Chrome Edge Firefox Safari Opera
Yes Yes Yes Yes Yes

typedArrayInternet Explorer 11(或更早版本)不支持。