🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] # 20.1 概述 类型化数组(Typed Arrays)是一个用于处理二进制数据的 ECMAScript 6 的 API。 代码示例: ```js const typedArray = new Uint8Array([0]) console.log(typedArray) // 3 typedArray[0] = 5 const normalArray = [...typedArray] // [5,1,2] // The elements are stored in typedArray.buffer. // Get a different view on the same data: const dataView = new DataView(typedArray.buffer) console.log(dataView.getUint8(0)) // 5 ``` ArrayBuffer 实例 存储要处理的二进制数据。 两种*views* 用于访问数据: - 类型化数组( `Uint8Array`, `Int16Array`, `Float32Array` 等)将 ArrayBuffer 解释为单个类型的元素的索引序列。 - `DataView` 实例允许您在 ArrayBuffer 内的任何字节偏移处( any byte offset)访问数据为多种类型( `Uint8` , `Int16` , `Float32` 等)的元素。 以下浏览器 API 支持 Typed Arrays( [详细信息](http://exploringjs.com/es6/ch_typed-arrays.html#sec_browser-apis-supporting-typed-arrays)在专门章节中提到): - File API - XMLHttpRequest - Fetch API - Canvas - WebSockets - And more # 20.2 简介 在 web 上遇到的很多数据都是文本:JSON 文件、HTML 文件、CSS 文件、JavaScript 代码等等。为了处理这些数据,JavaScript 的内置字符串数据类型运行良好。 然而,一直到几年前,JavaScript 都没有能力处理二进制数据。 2011 年 2 月 8 日, [Typed Array Specification 1.0](https://www.khronos.org/registry/typedarray/specs/1.0/) 标准化了处理二进制数据的工具。 到目前为止,各种引擎都[很好地支持](http://caniuse.com/#feat=typedarrays) Typed Arrays。 通过 ECMAScript 6,它们成为了核心语言的一部分,并在这个过程中获得了许多以前只能用于数组(`map()`、`filter()`等)的方法。 Typed Arrays 的主要用例是: - 处理二进制数据:在 HTML Canvas 元素中处理图像数据,解析二进制文件,处理二进制网络协议等。 - 与本机 API 交互:本机 API 通常以二进制格式接收和返回数据,您无法在传统 JavaScript 中存储或操作它们。 这意味着无论何时与这样的 API 进行通信,每次调用时都必须将数据从 JavaScript 转换为二进制并返回。 Typed Arrays 消除了这个瓶颈。 与本机 API 通信的一个示例是 WebGL,最初为其创建了 Typed Arrays。 “ [Typed Arrays:浏览器中的二进制数据](http://www.html5rocks.com/en/tutorials/webgl/typed_arrays/#toc-history) ”(由 Ilmari Heikkinen 发表在 HTML5 Rocks 上)文章的“ Typed Arrays ”部分提供了更多详细的介绍。 在类型化数组 API 中,两种对象一起工作 - 缓冲区: ArrayBuffer 实例保存二进制数据。 - 视图:提供访问二进制数据的方法。 有两种观点: - 类型数组构造函数(`Uint8Array`、`Float64Array` 等)的实例与普通数组的工作方式非常相似,但只允许其元素使用单一类型,并且没有漏洞。 - `DataView` 的一个实例允许您访问缓冲区中任何字节偏移量的数据,并将该数据解释为几种类型(`Uint8`、`Float64` 等)之一。 这是 Typed Array 的 API 的结构图(值得注意的是:所有 Typed Arrays 都有一个共同的超类(superclass)): ![typed_arrays_class_diagram](https://box.kancloud.cn/bdab21694b20197f0b7b6a83d092d161_2116x1516.jpg =529x378) ### 20.2.1 Element types