ES6 标准入门

ES6 标准入门
编辑推荐
适读人群 :JavaScript 领域研究人员,前端开发人员
- √ 横跨 ES2015/2016/2017 新标,抢占 JavaScript 制高点
- √ 由千万级名博、布道引航无数前端入行的阮一峰执笔
- √ 来自 BAT 一线实践,精彩案例透彻解读新标|保留语法
- √ 新标首著,凝结多年研究心得,剖析 ES 理解应用难题
内容简介
ES6 是下一代 JavaScript 语言标准的统称,每年 6 月发布一次修订版,迄今为止已经发布了 3 个版本,分别是 ES2015、ES2016、ES2017。《ES6 标准入门(第 3 版)》根据 ES2017 标准,详尽介绍了所有新增的语法,对基本概念、设计目的和用法进行了清晰的讲解,给出了大量简单易懂的示例。《ES6 标准入门(第 3 版)》为中级难度,适合那些已经对 JavaScript 语言有一定了解的读者,可以作为学习这门语言全新进展的工具书,也可以作为参考手册供大家随时查阅新语法。
第 3 版增加了超过 30% 的内容,完全覆盖了 ES2017 标准,相比第 2 版介绍了更多的语法点,还调整了原有章节的文字表达,充实了示例,论述更准确,更易懂易学。
作者简介
阮一峰,资深 JavaScript 语言专家,知名技术博客作者,专注于网站开发技术十余年。
畅销书《黑客与画家》《软件随想录》的译者,现就职于蚂蚁金服集团。
目录
第 1 章 ECMAScript 6 简介 1
- 1.1 ECMAScript 和 JavaScript 的关系 1
- 1.2 ES6 与 ECMAScript 2015 的关系 1
- 1.3 语法提案的批准流程 2
- 1.4 ECMAScript 的历史 3
- 1.5 部署进度 4
- 1.6 Babel 转码器 4
- 1.6.1 配置文件。babelrc 5
- 1.6.2 命令行转码 babel-cli 6
- 1.6.3 babel-node 7
- 1.6.4 babel-register 8
- 1.6.5 babel-core 8
- 1.6.6 babel-polyfill 9
- 1.6.7 浏览器环境 10
- 1.6.8 在线转换 10
- 1.6.9 与其他工具的配合 11
- 1.7 Traceur 转码器 11
- 1.7.1 直接插入网页 12
- 1.7.2 在线转换 13
- 1.7.3 命令行转换 14
- 1.7.4 Node 环境的用法 15
第 2 章 let 和 const 命令 17
- 2.1 let 命令 17
- 2.1.1 基本用法 17
- 2.1.2 不存在变量提升 19
- 2.1.3 暂时性死区 19
- 2.1.4 不允许重复声明 21
- 2.2 块级作用域 22
- 2.2.1 为什么需要块级作用域 22
- 2.2.2 ES6 的块级作用域 23
- 2.2.3 块级作用域与函数声明 24
- 2.2.4 do 表达式 27
- 2.3 const 命令 28
- 2.3.1 基本用法 28
- 2.3.2 本质 29
- 2.3.3 ES6 声明变量的 6 种方法 30
- 2.4 顶层对象的属性 30
- 2.5 global 对象 31
第 3 章 变量的解构赋值 33
- 3.1 数组的解构赋值 33
- 3.1.1 基本用法 33
- 3.1.2 默认值 35
- 3.2 对象的解构赋值 37
- 3.3 字符串的解构赋值 41
- 3.4 数值和布尔值的解构赋值 41
- 3.5 函数参数的解构赋值 42
- 3.6 圆括号问题 43
- 3.6.1 不能使用圆括号的情况 43
- 3.6.2 可以使用圆括号的情况 44
- 3.7 用途 44
第 4 章 字符串的扩展 49
- 4.1 字符的 Unicode 表示法 49
- 4.2 codePointAt() 50
- 4.3 String.fromCodePoint() 52
- 4.4 字符串的遍历器接口 52
- 4.5 at() 53
- 4.6 normalize() 53
- 4.7 includes()、startsWith()、endsWith() 54
- 4.8 repeat() 55
- 4.9 padStart()、padEnd() 56
- 4.10 模板字符串 57
- 4.11 实例:模板编译 60
- 4.12 标签模板 62
- 4.13 String.raw() 67
- 4.14 模板字符串的限制 68
第 5 章 正则的扩展 71
- 5.1 RegExp 构造函数 71
- 5.2 字符串的正则方法 72
- 5.3 u 修饰符 72
- 5.4 y 修饰符 74
- 5.5 sticky 属性 77
- 5.6 flags 属性 77
- 5.7 s 修饰符:dotAll 模式 78
- 5.8 后行断言 79
- 5.9 Unicode 属性类 80
- 5.10 具名组匹配 81
- 5.10.1 简介 81
- 5.10.2 解构赋值和替换 82
- 5.10.3 引用 83
第 6 章 数值的扩展 85
- 6.1 二进制和八进制表示法 85
- 6.2 Number.isFinite()、Number.isNaN() 86
- 6.3 Number.parseInt()、Number.parseFloat() 87
- 6.4 Number.isInteger() 88
- 6.5 Number.EPSILON 88
- 6.6 安全整数和 Number.isSafeInteger() 89
- 6.7 Math 对象的扩展 92
- 6.7.1 Math.trunc() 92
- 6.7.2 Math.sign() 92
- 6.7.3 Math.cbrt() 93
- 6.7.4 Math.clz32() 94
- 6.7.5 Math.imul() 95
- 6.7.6 Math.fround() 95
- 6.7.7 Math.hypot() 96
- 6.7.8 对数方法 96
- 6.7.9 双曲函数方法 98
- 6.8 Math.signbit() 98
- 6.9 指数运算符 99
- 6.10 Integer 数据类型 99
- 6.10.1 简介 99
- 6.10.2 运算 100
第 7 章 函数的扩展 103
- 7.1 函数参数的默认值 103
- 7.1.1 基本用法 103
- 7.1.2 与解构赋值默认值结合使用 105
- 7.1.3 参数默认值的位置 107
- 7.1.4 函数的 length 属性 108
- 7.1.5 作用域 108
- 7.1.6 应用 111
- 7.2 rest 参数 112
- 7.3 严格模式 113
- 7.4 name 属性 115
- 7.5 箭头函数 116
- 7.5.1 基本用法 116
- 7.5.2 注意事项 118
- 7.5.3 嵌套的箭头函数 121
- 7.6 绑定 this 123
- 7.7 尾调用优化 124
- 7.7.1 什么是尾调用 124
- 7.7.2 尾调用优化 125
- 7.7.3 尾递归 126
- 7.7.4 递归函数的改写 128
- 7.7.5 严格模式 129
- 7.7.6 尾递归优化的实现 129
- 7.8 函数参数的尾逗号 132
第 8 章 数组的扩展 133
- 8.1 扩展运算符 133
- 8.1.1 含义 133
- 8.1.2 替代数组的 apply 方法 134
- 8.1.3 扩展运算符的应用 136
- 8.2 Array.from() 139
- 8.3 Array.of() 142
- 8.4 数组实例的 copyWithin() 143
- 8.5 数组实例的 find() 和 findIndex() 144
- 8.6 数组实例的 fill() 145
- 8.7 数组实例的 entries()、keys() 和 values() 145
- 8.8 数组实例的 includes() 146
- 8.9 数组的空位 147
第 9 章 对象的扩展 151
- 9.1 属性的简洁表示法 151
- 9.2 属性名表达式 154
- 9.3 方法的 name 属性 156
- 9.4 Object.is() 157
- 9.5 Object.assign() 158
- 9.5.1 基本用法 158
- 9.5.2 注意点 160
- 9.5.3 常见用途 161
- 9.6 属性的可枚举性 163
- 9.7 属性的遍历 165
- 9.8 proto 属性、Object.setPrototypeOf()、Object.getPrototypeOf() 166
- 9.8.1 proto 属性 166
- 9.8.2 Object.setPrototypeOf() 167
- 9.8.3 Object.getPrototypeOf() 168
- 9.9 Object.keys()、Object.values()、Object.entries() 169
- 9.9.1 Object.keys() 169
- 9.9.2 Object.values() 170
- 9.9.3 Object.entries 171
- 9.10 对象的扩展运算符 173
- 9.11 Object.getOwnPropertyDescriptors() 177
- 9.12 Null 传导运算符 181
第 10 章 Symbol 183
- 10.1 概述 183
- 10.2 作为属性名的 Symbol 185
- 10.3 实例:消除魔术字符串 188
- 10.4 属性名的遍历 189
- 10.5 Symbol.for()、Symbol.keyFor() 191
- 10.6 实例:模块的 Singleton 模式 192
- 10.7 内置的 Symbol 值 194
- 10.7.1 Symbol.hasInstance 194
- 10.7.2 Symbol.isConcatSpreadable 195
- 10.7.3 Symbol.species 196
- 10.7.4 Symbol.match 197
- 10.7.5 Symbol.replace 197
- 10.7.6 Symbol.search 198
- 10.7.7 Symbol.split 198
- 10.7.8 Symbol.iterator 199
- 10.7.9 Symbol.toPrimitive 200
- 10.7.10 Symbol.toStringTag 201
- 10.7.11 Symbol.unscopables 202
第 11 章 Set 和 Map 数据结构 205
- 11.1 Set 205
- 11.1.1 基本用法 205
- 11.1.2 Set 实例的属性和方法 207
- 11.1.3 遍历操作 208
- 11.2 WeakSet 212
- 11.2.1 含义 212
- 11.2.2 语法 212
- 11.3 Map 214
- 11.3.1 含义和基本用法 214
- 11.3.2 实例的属性和操作方法 218
- 11.3.3 遍历方法 220
- 11.3.4 与其他数据结构的互相转换 222
- 11.4 WeakMap 225
- 11.4.1 含义 225
- 11.4.2 WeakMap 的语法 227
- 11.4.3 WeakMap 示例 228
- 11.4.4 WeakMap 的用途 229
第 12 章 Proxy 233
- 12.1 概述 233
- 12.2 Proxy 实例的方法 237
- 12.2.1 get() 237
- 12.2.2 set() 241
- 12.2.3 apply() 243
- 12.2.4 has() 244
- 12.2.5 construct() 246
- 12.2.6 deleteProperty() 247
- 12.2.7 defineProperty() 248
- 12.2.8 getOwnPropertyDescriptor() 248
- 12.2.9 getPrototypeOf() 249
- 12.2.10 isExtensible() 249
- 12.2.11 ownKeys() 250
- 12.2.12 preventExtensions() 254
- 12.2.13 setPrototypeOf() 255
- 12.3 Proxy.revocable() 255
- 12.4 this 问题 256
- 12.5 实例:Web 服务的客户端 258
第 13 章 Reflect 259
- 13.1 概述 259
- 13.2 静态方法 261
- 13.3 实例:使用 Proxy 实现观察者模式 270
第 14 章 Promise 对象 273
- 14.1 Promise 的含义 273
- 14.2 基本用法 274
- 14.3 Promise.prototype.then() 278
- 14.4 Promise.prototype.catch() 279
- 14.5 Promise.all() 285
- 14.6 Promise.race() 287
- 14.7 Promise.resolve() 288
- 14.8 Promise.reject() 290
- 14.9 两个有用的附加方法 291
- 14.10 应用 292
- 14.11 Promise.try() 294
第 15 章 Iterator 和 for…of 循环 297
- 15.1 Iterator(遍历器)的概念 297
- 15.2 默认 Iterator 接口 300
- 15.3 调用 Iterator 接口的场合 305
- 15.4 字符串的 Iterator 接口 307
- 15.5 Iterator 接口与 Generator 函数 308
- 15.6 遍历器对象的 return()、throw() 309
- 15.7 for…of 循环 310
第 16 章 Generator 函数的语法 317
- 16.1 简介 317
- 16.2 next 方法的参数 323
- 16.3 for…of 循环 325
- 16.4 Generator.prototype.throw() 328
- 16.5 Generator.prototype.return() 334
- 16.6 yield*表达式 335
- 16.7 作为对象属性的 Generator 函数 342
- 16.8 Generator 函数 this 342
- 16.9 含义 345
- 16.10 应用 347
第 17 章 Generator 函数的异步应用 355
- 17.1 传统方法 355
- 17.2 基本概念 355
- 17.3 Generator 函数 357
- 17.4 Thunk 函数 361
- 17.5 co 模块 368
- 17.6 实例:处理 Stream 373
第 18 章 async 函数 375
- 18.1 含义 375
- 18.2 用法 377
- 18.3 语法 379
- 18.4 async 函数的实现原理 386
- 18.5 其他异步处理方法的比较 387
- 18.6 实例:按顺序完成异步操作 388
- 18.7 异步遍历器 390
第 19 章 Class 的基本语法 399
- 19.1 简介 399
- 19.2 严格模式 403
- 19.3 constructor 方法 403
- 19.4 类的实例对象 404
- 19.5 Class 表达式 406
- 19.6 不存在变量提升 407
- 19.7 私有方法 408
- 19.8 私有属性 409
- 19.9 this 的指向 410
- 19.10 name 属性 412
- 19.11 Class 的取值函数(getter)和存值函数(setter) 412
- 19.12 Class 的 Generator 方法 413
- 19.13 Class 的静态方法 414
- 19.14 Class 的静态属性和实例属性 415
- 19.15 new.target 属性 418
第 20 章 Class 的继承 421
- 20.1 简介 421
- 20.2 Object.getPrototypeOf() 423
- 20.3 super 关键字 423
- 20.4 类的 prototype 属性和 proto 属性 429
- 20.4.1 extends 的继承目标 430
- 20.4.2 实例的 proto 属性 432
- 20.5 原生构造函数的继承 432
- 20.6 Mixin 模式的实现 436
第 21 章 修饰器 439
- 21.1 类的修饰 439
- 21.2 方法的修饰 442
- 21.3 为什么修饰器不能用于函数 444
- 21.4 core-decorators.js 446
- 21.5 使用修饰器实现自动发布事件 449
- 21.6 Mixin 450
- 21.7 Trait 453
- 21.8 Babel 转码器的支持 456
第 22 章 Module 的语法 457
- 22.1 概述 457
- 22.2 严格模式 458
- 22.3 export 命令 459
- 22.4 import 命令 462
- 22.5 模块的整体加载 464
- 22.6 export default 命令 465
- 22.7 export 与 import 的复合写法 468
- 22.8 模块的继承 469
- 22.9 跨模块常量 470
- 22.10 import() 471
- 22.10.1 简介 471
- 22.10.2 适用场合 472
- 22.10.3 注意点 473
第 23 章 Module 的加载实现 475
- 23.1 浏览器加载 475
- 23.1.1 传统方法 475
- 23.1.2 加载规则 476
- 23.2 ES6 模块与 CommonJS 模块的差异 477
- 23.3 Node 加载 481
- 23.4 循环加载 485
- 23.5 ES6 模块的转码 492
第 24 章 编程风格 495
- 24.1 块级作用域 495
- 24.2 字符串 497
- 24.3 解构赋值 497
- 24.4 对象 498
- 24.5 数组 500
- 24.6 函数 501
- 24.7 Map 结构 503
- 24.8 Class 503
- 24.9 模块 504
- 24.10 ESLint 的使用 506
第 25 章 读懂 ECMAScript 规格 509
- 25.1 概述 509
- 25.2 相等运算符 510
- 25.3 数组的空位 511
- 25.4 数组的 map 方法 513
第 26 章 ArrayBuffer 517
- 26.1 ArrayBuffer 对象 518
- 26.2 TypedArray 视图 521
- 26.3 复合视图 534
- 26.4 DataView 视图 535
- 26.5 二进制数组的应用 537
- 26.6 SharedArrayBuffer 541
- 26.7 Atomics 对象 543