[TOC]
> http://exploringjs.com/es2016-es2017/index.html
> [https://www.html.cn/archives/7753](https://www.html.cn/archives/7753)
# II ECMAScript 2016
## 3. `Array.prototype.includes`
3.1 Overview
3.2 The Array method includes
3.3 Frequently asked questions
3.4 Further reading
## 4. 求幂运算符 (**)
4.1 概述
4.2 An infix operator for exponentiation
4.3 Examples
4.4 Precedence
4.5 Further reading
# III ECMAScript 2017
## 5. Async Functions (异步函数)
5.1 概述
5.1.1 变体(Variants
5.1.2 Async functions always return Promises
5.1.3 Handling results and errors of asynchronous computations via await
5.2 Understanding async functions
5.2.1 Writing asynchronous code via generators
5.2.2 Writing asynchronous code via async functions
5.2.3 Async functions are started synchronously, settled asynchronously
5.2.4 Returned Promises are not wrapped
5.3 Tips for using `await`
5.3.1 Don’t forget `await`
5.3.2 You don’t need await if you “fire and forget”
5.3.3 `await` is sequential,`Promise.all()`is parallel
5.4 Async functions and callbacks
5.4.1 `Array.prototype.map()`
5.4.2 `Array.prototype.forEach()`
5.5 Tips for using async functions
5.5.1 Know your Promises
5.5.2 Immediately Invoked Async Function Expressions
5.5.3 Unit testing with async functions
5.5.4 Don’t worry about unhandled rejections
5.6 Further reading
## 6. 共享内存 和 Atomics
6.1 Parallelism vs. concurrency
6.1.1 Models of parallelism
6.2 A history of JS parallelism
6.2.1 The next step: SharedArrayBuffer
6.3 Shared Array Buffers
6.3.1 Creating and sending a Shared Array Buffer
6.3.2 Receiving a Shared Array Buffer
6.4 Atomics: safely accessing shared data
6.4.1 Problem: Optimizations make code unpredictable across workers
6.4.2 Solution: atomics
6.4.3 Problem: torn values
6.5 Shared Array Buffers in use
6.5.1 Shared Array Buffers and the run-to-completion semantics of JavaScript
6.5.2 Shared Array Buffers and asm.js and WebAssembly
6.5.3 Sharing data other than integers
6.5.4 How much faster is code that uses Shared Array Buffers?
6.6 Example
6.6.1 Using a shared lock
6.6.2 Implementing a shared lock
6.6.3 Conclusion for the example
6.7 The API for shared memory and atomics
6.7.1 SharedArrayBuffer
6.7.2 Atomics
6.8 FAQ
6.8.1 What browsers support Shared Array Buffers?
6.9 Further reading
## 7. `Object.entries()`和`Object.values()`
7.1 概述
7.1.1 `Object.entries()`
7.1.2 `Object.values()`
7.2 `Object.entries()`
7.2.1 Setting up Maps via Object.entries()
7.2.2 FAQ: `Object.entries()`
7.3 Object.values()
## 8. 新的字符串方法:`padStart`和`padEnd`
8.1 Overview
8.2 Why pad strings?
8.3 `String.prototype.padStart(maxLength, fillString=' ')`
8.3.1 A simple implementation of padStart()
8.4 `String.prototype.padEnd(maxLength, fillString=' ')`
8.5 FAQ: `padStart`and`padEnd`
8.5.1 Why aren’t the padding methods called padLeft and padRight?
## 9. `Object.getOwnPropertyDescriptors()`
9.1 Overview
9.2 `Object.getOwnPropertyDescriptors()`
9.3 Use cases for `Object.getOwnPropertyDescriptors()`
9.3.1 Use case: copying properties into an object
9.3.2 Use case: cloning objects
9.3.3 Use case: cross-platform object literals with arbitrary prototypes
9.4 Pitfall: copying methods that use `super`
## 10. 函数参数列表和调用尾逗号
10.1 Overview
10.2 Trailing commas in object literals and Array literals
10.3 Feature: allow trailing commas in parameter definitions and function calls
## 11. 修饰器(Decorator)