[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
- 关于本书
- 目录简介
- 关于这本书你需要知道的
- 序
- 前言
- I 背景
- 1. About ECMAScript 6 (ES6)
- 2. 常见问题:ECMAScript 6
- 3. 一个JavaScript:在 ECMAScript 6 中避免版本化
- 4. 核心ES6特性
- II 数据
- 5. New number and Math features
- 6. 新的字符串特性
- 7. Symbol
- 8. Template literals
- 第9章 变量与作用域
- 第10章 解构
- 第11章 参数处理
- III 模块化
- 12. ECMAScript 6中的可调用实体
- 13. 箭头函数
- 14. 除了类之外的新OOP特性
- 15. 类
- 16. 模块
- IV 集合
- 17. The for-of loop
- 18. New Array features
- 19. Maps and Sets
- 20. 类型化数组
- 21. 可迭代对象和迭代器
- 22. 生成器( Generator )
- V 标准库
- 23. 新的正则表达式特性
- 24. 异步编程 (基础知识)
- 25. 异步编程的Promise
- VI 杂项
- 26. Unicode in ES6
- 27. 尾部调用优化
- 28 用 Proxy 实现元编程
- 29. Coding style tips for ECMAScript 6
- 30. 概述ES6中的新内容
- 注释
- ES5过时了吗?
- ==个人笔记==