在过去,JavaScript 一直被认为是一种文本处理语言。但随着技术的不断发展,越来越多的应用需要处理二进制数据。为了满足这种需求,ECMAScript 2019 引入了一种新的数据类型:ArrayBuffer
,以及一套用于处理这种数据类型的 API。
ArrayBuffer
ArrayBuffer
是一种可以存储二进制数据的缓冲区。它类似于数组,但是只能存储数字类型的数据。我们可以通过以下方式创建一个 ArrayBuffer
对象:
const buffer = new ArrayBuffer(8);
上述代码创建了一个长度为 8 字节的 ArrayBuffer
对象。我们可以通过以下方式访问这个对象中的数据:
const int32View = new Int32Array(buffer); int32View[0] = 42; console.log(int32View[0]); // 42
上述代码创建了一个 Int32Array
对象,它使用了上面创建的 ArrayBuffer
对象作为数据源。我们可以将 int32View
视为一个由 32 位整数组成的数组,它的长度是 8 字节除以 4 字节得到的 2。我们将第一个元素设置为 42,并输出它的值。
DataView
DataView
是一种用于读写 ArrayBuffer
对象中数据的 API。它可以让我们以不同的字节顺序读写数据,这对于处理不同的二进制数据格式非常有用。以下是一个使用 DataView
读写 ArrayBuffer
对象的示例:
const buffer = new ArrayBuffer(8); const view = new DataView(buffer); view.setInt16(0, 42); view.setInt16(2, -42); console.log(view.getInt16(0)); // 42 console.log(view.getInt16(2)); // -42
上述代码创建了一个长度为 8 字节的 ArrayBuffer
对象,并使用 DataView
对象设置了前两个字节和后两个字节的值。我们可以通过 getInt16
方法读取这些值,并输出它们的值。
TypedArray
TypedArray
是一组由 ArrayBuffer
对象支持的数组类型。这些类型包括 Int8Array
、Uint8Array
、Int16Array
、Uint16Array
、Int32Array
、Uint32Array
、Float32Array
和 Float64Array
。这些类型可以让我们按照特定的格式读写 ArrayBuffer
对象中的数据。以下是一个使用 TypedArray
读写 ArrayBuffer
对象的示例:
const buffer = new ArrayBuffer(8); const int32View = new Int32Array(buffer); int32View[0] = 42; const int8View = new Int8Array(buffer); console.log(int8View); // [42, 0, 0, 0, 0, 0, 0, 0]
上述代码创建了一个长度为 8 字节的 ArrayBuffer
对象,并使用 Int32Array
对象将第一个元素设置为 42。接着,我们使用 Int8Array
对象读取这个数组,输出它的值。由于 Int8Array
将每个元素视为一个字节,因此我们可以看到输出的数组是由一个 42 和七个 0 组成的。
结论
ECMAScript 2019 引入了一套用于处理二进制数据的 API,这可以让我们更方便地处理不同的二进制数据格式。ArrayBuffer
、DataView
和 TypedArray
是这套 API 的核心,它们可以让我们读写二进制数据,并按照特定的格式进行处理。如果你需要处理二进制数据,那么这些 API 会对你非常有用。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6726abb02e7021665e1b08f9