第1章 变量与常量 1
1.1 var的问题 1
1.2 let语句 2
1.3 使用let的好处 2
1.3.1 避免重复声明 2
1.3.2 避免变量未声明就使用 3
1.3.3 避免全局变量成为全局对象的属性 3
1.3.4 简化代码 3
1.3.5 模拟私有成员 4
1.4 const语句 5
1.5 建议的方式 6
1.6 小 结 6
第2章 表达式和运算符 7
2.1 解构赋值 7
2.1.1 自定义变量名 8
2.1.2 剩余项 8
2.1.3 默认值 9
2.1.4 函数参数 9
2.1.5 忽略某些数据 10
2.1.6 克隆数组 11
2.1.7 克隆对象 11
2.1.8 数据交换 11
2.1.9 返回多个值 12
2.2 幂运算符 12
2.2.1 右结合 13
2.2.2 带歧义的幂运算 13
2.3 Math对象 13
2.4 小 结 14
第3章 字符串 15
3.1 四字节字符的定义方式 15
3.2 新增的方法 15
3.2.1 codePointAt方法 15
3.2.2 fromCodePoint方法 16
3.2.3 normalize方法 16
3.2.4 includes方法 17
3.2.5 startsWith方法 17
3.2.6 endsWith方法 18
3.2.7 repeat方法 18
3.2.8 padStart和padEnd方法 18
3.3 正则表达式 19
3.3.1 u标志 19
3.3.2 y标志 19
3.3.3 DOTALL模式(s标志) 20
3.3.4 flags属性 20
3.3.5 命名捕获组 20
3.3.6 在后向引用中使用命名捕获组 21
3.3.7 在替换中使用命名捕获组 21
3.3.8 Unicode属性转义 21
3.3.9 后行断言 22
3.4 模板字面量 22
3.4.1 语法 23
3.4.2 多行文本 24
3.4.3 嵌入数据 24
3.4.4 嵌套模板 24
3.4.5 带标签的模板字面量 26
3.4.6 原始值 26
3.4.7 转义字符序列的功能修改 27
3.5 小 结 27
第4章 数字和符号 28
4.1 数 字 28
4.1.1 Number.isFinite() 28
4.1.2 Number.isNaN() 29
4.1.3 Number.parseInt()和Number.parseFloat() 29
4.1.4 Number.isInteger() 29
4.1.5 安全整型 30
4.2 符号 30
4.2.1 值的唯一性 31
4.2.2 私有成员 31
4.2.3 获取符号属性 32
4.2.4 全局共享 33
4.3 众所周知的符号 33
4.3.1 Symbol.hasInstance 33
4.3.2 Symbol.isConcatSpreadable 34
4.3.3 Symbol.iterator 35
4.3.4 Symbol.match 35
4.3.5 Symbol.replace 35
4.3.6 Symbol.search 35
4.3.7 Symbol.split 35
4.3.8 Symbol.species 35
4.3.9 Symbol.toPrimitive 36
4.3.10 Symbol.toStringTag 36
4.3.11 Symbol.unscopables 37
4.4 小 结 37
第5章 数组和类型化数组 39
5.1 新方法 39
5.1.1 of方法 39
5.1.2 from方法 40
5.1.3 find方法 40
5.1.4 findIndex方法 41
5.1.5 fill方法 41
5.1.6 copyWithin方法 41
5.1.7 includes方法 41
5.1.8 entries方法 42
5.1.9 keys方法 42
5.1.10 values方法 42
5.2 类型化数组 42
5.2.1 数据类型 42
5.2.2 数组缓冲区 43
5.2.3 数据视图 43
5.2.4 类型化数组即视图 45
5.2.5 类型化数组与数组的主要区别 45
5.3 小 结 46
第6章 对象 47
6.1 属性简写 47
6.2 方法简写 47
6.3 未定的属性名和方法名 48
6.4 新方法 49
6.4.1 is方法 49
6.4.2 assign方法 49
6.4.3 values方法 51
6.4.4 entries方法 52
6.4.5 getOwnPropertyDescriptors方法 52
6.5 原型 53
6.6 super关键字 54
6.7 小 结 55
第7章 函数 56
7.1 参数的默认值 56
7.1.1 设置默认值 56
7.1.2 参数默认值表达式 57
7.1.3 使用参数值作为默认值 57
7.1.4 使用参数值作为默认值表达式的参数 58
7.2 剩余参数 58
7.3 扩展运算符 59
7.4 name属性 59
7.4.1 声明函数 59
7.4.2 函数表达式 60
7.4.3 对象的方法 60
7.4.4 bind方法创建的函数 60
7.4.5 new Function创建的函数 60
7.4.6 实例 61
7.5 new.target属性 61
7.6 在参数中使用尾后逗号 62
7.7 箭头函数 62
7.7.1 基本语法 62
7.7.2 箭头必须与参数在同一行 63
7.7.3 不绑定this 63
7.7.4 没有arguments对象 65
7.7.5 定义方法时使用箭头函数 65
7.7.6 不能用作构造函数 65
7.7.7 没有原型 65
7.7.8 不能作为生成器 65
7.7.9 返回对象字面量 65
7.8 小 结 65
第8章 集合和映射 67
8.1 Set 67
8.1.1 基本语法 67
8.1.2 添加和删除元素 67
8.1.3 清空Set 68
8.1.4 判断某个值是否存在 68
8.1.5 遍历 68
8.1.6 返回元素总数 68
8.1.7 转换为数组 68
8.2 WeakSet 68
8.2.1 基本语法 69
8.2.2 添加和删除元素 69
8.2.3 判断某个值是否存在 69
8.2.4 不可遍历 69
8.3 Map 69
8.3.1 基本语法 70
8.3.2 添加和删除元素 70
8.3.3 获取值 70
8.3.4 清空Map 71
8.3.5 判断某个键是否存在 71
8.3.6 遍历 71
8.3.7 返回元素总数 71
8.4 WeakMap 71
8.4.1 基本语法 71
8.4.2 添加和删除元素 72
8.4.3 获取值 72
8.4.4 判断某个键是否存在 72
8.4.5 不可遍历 72
8.5 小 结 72
第9章 迭代器和生成器 73
9.1 迭代器 73
9.1.1 内置迭代器 73
9.1.2 next方法 73
9.1.3 对象与迭代器 74
9.2 异步迭代器 74
9.3 生成器 74
9.3.1 基本语法 75
9.3.2 返回可迭代对象 75
9.3.3 在类或对象中定义生成器 75
9.3.4 高级生成器 76
9.3.5 抛出错误 78
9.3.6 return语句 78
9.3.7 任务队列 79
9.3.8 异步生成器 81
9.4 for…of循环 81
9.5 for await…of循环 82
9.6 小 结 82
第10章 Promise对象与异步函数 83
10.1 Promise对象 83
10.1.1 基本语法 83
10.1.2 Promise的状态 84
10.1.3 then方法 84
10.1.4 catch方法 85
10.1.5 all方法 85
10.1.6 race方法 86
10.1.7 resolve方法 86
10.1.8 reject方法 86
10.1.9 finally方法 86
10.2 异步函数 86
10.3 小 结 87
第11章 代理 88
11.1 Reflect对象 88
11.2 使用代理 89
11.3 可代理的操作 90
11.3.1 getPrototypeOf操作 90
11.3.2 setPrototypeOf操作 90
11.3.3 isExtensible操作 91
11.3.4 preventExtensions操作 91
11.3.5 getOwnPropertyDescriptor操作 91
11.3.6 defineProperty操作 92
11.3.7 has操作 92
11.3.8 get操作 93
11.3.9 set操作 94
11.3.10 deleteProperty操作 94
11.3.11 ownKeys操作 95
11.3.12 apply操作 96
11.3.13 construct操作 96
11.4 可撤销的代理对象 97
11.5 小 结 97
第12章 类和模块 98
12.1 类 98
12.1.1 类的声明 98
12.1.2 类表达式 98
12.1.3 定义属性 99
12.1.4 定义方法 99
12.1.5 访问器属性 99
12.1.6 静态方法 100
12.1.7 继承 100
12.1.8 使用super调用父类同名方法 100
12.2 模 块 101
12.2.1 导出 101
12.2.2 导入 102
12.2.3 合并导出 103
12.2.4 无绑定的导入 103
12.3 模块的加载 104
12.4 小 结 104
第13章 自己动手写一个框架 105
13.1 框架的类型 105
13.2 开发工具 105
13.2.1 开发工具的选择 105
13.2.2 安装Visual Studio Code 106
13.2.3 配置开发环境 110
13.3 编写框架 111
13.3.1 创建和配置项目 111
13.3.2 安装Gulp 112
13.3.3 安装Browserify 113
13.3.4 安装Watchify 113
13.3.5 安装Babel 113
13.3.6 安装Uglify 114
13.3.7 配置Gulp 114
13.3.8 添加DOM操作 118
13.3.9 添加样式操作 119
13.3.10 添加样式类操作 122
13.3.11 添加属性操作 123
13.3.12 添加事件操作 125
13.3.13 添加Ajax功能 127
13.4 小 结 129