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

AXIHE / 精选资源

浏览全部教程

面试题

学习网站

前端培训
自己甄别

前端书籍

关于朱安邦

我叫 朱安邦,阿西河的站长,在杭州。

以前是一名平面设计师,后来开始接接触前端开发,主要研究前端技术中的JS方向。

业余时间我喜欢分享和交流自己的技术,欢迎大家关注我的 Bilibili

关注我: Github / 知乎

于2021年离开前端领域,目前重心放在研究区块链上面了

我叫朱安邦,阿西河的站长

目前在杭州从事区块链周边的开发工作,机械专业,以前从事平面设计工作。

2014年底脱产在老家自学6个月的前端技术,自学期间几乎从未出过家门,最终找到了满意的前端工作。更多>

于2021年离开前端领域,目前从事区块链方面工作了