图书目录

目录

第1章JavaScript发展史1

1.1语言诞生1

1.1.1JavaScript 1.12

1.1.2JavaScript 1.23

1.2标准建立与命名4

1.2.1ECMAScript 2和ECMAScript 36

1.2.2ECMAScript 4与ECMAScript 3.1修订版草案7

1.2.3严格模式与OneJS9

1.3统一与未来10

1.3.1更完善的提案制度10

1.3.2向前兼容的关键字12

1.3.3语义完善13

1.3.4简化概念14

1.3.5快速发展14

1.3.6社区沟通15

1.3.7规范性公约15

第2章JavaScript类型系统18

2.1String类型18

2.1.1字符串编码19

2.1.2多进制表示方式19

2.1.3代码点转换规则21

2.1.4计算JavaScript字符串中的符号数量22

2.1.5结构良好的字符串25

2.1.6结构良好的JSON.stringify26

2.1.7字符串的归一化27

2.1.8模板字符串30

2.1.9标签函数30

2.1.10字符串方法31

2.2数值33

2.2.1Number类型34

2.2.2BigInt类型36

2.2.3数值字面量的表示36

2.2.4数值的比较37

2.2.5数值的转换38

2.2.6数值分隔符39

2.2.7数值与安全40

2.2.8精确求和40

2.3Boolean类型41

2.4Undefined类型和Null类型41

2.4.1空值判断的演进42

2.4.2支持私有属性44

2.4.3参数及解构默认值中的空值判定44

2.5Symbol类型46

2.5.1Symbol属性检索46

2.5.2Symbol共享体系47

2.5.3Wellknown Symbols48

2.6类型检测56

2.6.1typeof是如何识别类型的56

2.6.2instanceof57

2.6.3Object.prototype.toString()58

2.6.4品牌检查59

2.7类型转换60

2.8不同类型的相等性测试62

第3章JavaScript代码组织方式63

3.1脚本63

3.1.1脚本评估64

3.1.2全局声明初始化64

3.1.3受限全局属性与词法遮蔽66

3.2模块67

3.2.1导出语法68

3.2.2导入语法70

3.2.3重命名导入导出70

3.2.4间接绑定与模块隐私性71

3.2.5模块命名空间对象72

3.2.6模块元数据72

3.2.7脚本中的模块导入语法73

3.2.8导入和导出记录73

3.2.9模块加载阶段75

3.2.10与CJS交互78

3.2.11动态导入79

3.2.12Import Attributes80

3.2.13JSON模块80

3.2.14延迟模块评估81

第4章JavaScript语言基础82

4.1源代码82

4.2标识符与保留字83

4.2.1关键字与保留字83

4.2.2有效标识符85

4.2.3可接受的Unicode符号87

4.3词法环境与词法声明88

4.3.1TDZ的选择与应用88

4.3.2暂时性死区的价值89

4.3.3const与不变性无关90

4.3.4丢弃绑定90

4.3.5声明过程与提升91

4.3.6引用记录规范类型92

4.4语句95

4.4.1可选的catch语句97

4.4.2Hashbang98

4.5表达式与操作符98

4.5.1逻辑赋值运算符98

4.5.2解构赋值99

4.6循环101

4.7可选的分号104

4.8上下文与环境记录106

4.8.1作用域107

4.8.2环境组件的变迁108

4.9Realm110

4.10错误与异常113

4.10.1错误类别113

4.10.2throw表达式115

4.10.3Error Cause116

4.10.4Error.isError()117

第5章函数118

5.1函数基本构造118

5.1.1函数name属性及其推断119

5.1.2函数/类名的绑定方式120

5.1.3参数列表121

5.1.4非简单参数122

5.1.5默认值参数计算位置122

5.1.6函数参数的传递方式123

5.1.7arguments对象125

5.1.8关于arguments对象不是数组的论点126

5.1.9函数内置属性的可操作性126

5.1.10函数的toString()方法127

5.2箭头函数129

5.3函数声明及实例化过程130

5.4函数调用与this绑定131

5.5块中的函数声明132

5.6严格模式133

5.6.1严格模式下的扩展保留字134

5.6.2不支持未声明变量赋值134

5.6.3不支持使用delete删除未限定标识符134

5.6.4不支持隐式八进制134

5.6.5严格模式下函数中的限制134

5.6.6严格模式下对象操作的限制136

5.6.7不支持with语句136

5.6.8严格模式下禁止forin初始器137

5.7尾调用137

第6章对象139

6.1创建对象139

6.1.1属性简写140

6.1.2可计算属性141

6.1.3属性的评估顺序141

6.1.4访问器属性142

6.1.5类方法144

6.1.6对象的非规范构造方式145

6.2内部槽和内部方法146

6.2.1基本内部方法147

6.2.2定义而不是赋值148

6.2.3属性的检索与复制150

6.2.4更安全的属性检查机制150

6.2.5键的检索顺序151

6.3属性描述符153

6.4原型155

6.4.1原型链156

6.4.2原型模式与继承157

第7章数组159

7.1数组创建方式159

7.1.1数组字面量160

7.1.2Array160

7.1.3工厂方法160

7.1.4数组的length161

7.2索引访问能力的扩展162

7.3数组方法163

7.3.1元素查找163

7.3.2反向查找164

7.3.3数组展平164

7.3.4数组排序165

7.3.5数组分组166

7.3.6数组截取166

7.3.7数组元素替换167

7.3.8通过复制更改数组的新方法167

7.3.9数组合并168

第8章日期与时间169

8.1Date169

8.1.1日期时间字符串格式171

8.1.2比较方法171

8.2Temporal172

8.2.1Now对象173

8.2.2Temporal.PlainDate对象175

8.2.3Temporal.PlainTime对象176

8.2.4Temporal.PlainDateTime对象176

8.2.5Temporal.ZonedDateTime对象177

8.2.6Temporal不变性179

8.2.7日历系统180

8.2.8ISO 8601扩展181

8.2.9持续时间182

8.3时间计算与处理182

8.3.1四舍五入183

8.3.2时间跨度184

8.3.3时间比较185

8.3.4序列化185

8.3.5Temporal子类实例转换186

8.3.6与Date互操作186

第9章国际化188

9.1区域标识188

9.2Intl.Collator189

9.3Intl Enumeration190

9.4Intl.NumberFormat190

9.4.1format()和formatToParts()方法191

9.4.2formatRange()和formatRangeToParts()方法193

9.4.3resolvedOptions()和supportedLocalesOf()方法193

9.5Intl.DisplayNames194

9.6Intl.ListFormat195

9.7Intl.Locale196

9.8Intl.PluralRules197

9.9Intl.Segmenter197

9.10Intl.DateTimeFormat198

9.10.1formatToParts()方法200

9.10.2formatRange()方法200

9.11Intl.RelativeTimeFormat201

9.12Intl.DurationFormat202

9.13扩展timeZoneName选项203

9.14国际化数字格式API扩展204

第10章正则表达式206

10.1构造函数与字面量206

10.2RegExp原型上的属性207

10.2.1exec()方法207

10.2.2test()方法208

10.3Lookbehind208

10.4命名捕获组209

10.5标志212

10.5.1标志获取器212

10.5.2标志修改212

10.5.3y标志213

10.5.4u标志213

10.5.5v标志215

10.5.6s标志216

10.5.7d标志217

10.5.8模式修饰符217

10.6RegExp.escape()218

第11章Set和Map219

11.1Set221

11.1.1Set构造函数221

11.1.2新增Set方法222

11.2Map225

11.2.1Map构造函数225

11.2.2Set和Map的迭代操作226

11.3WeakSet227

11.4WeakMap227

11.5弱引用229

第12章代理与反射231

12.1代理陷阱与反射231

12.1.1apply陷阱232

12.1.2construct陷阱233

12.1.3defineProperty陷阱234

12.1.4deleteProperty陷阱235

12.1.5get陷阱235

12.1.6set陷阱236

12.1.7has陷阱237

12.1.8getPrototypeOf陷阱238

12.1.9setPrototypeOf陷阱239

12.1.10preventExtensions陷阱239

12.1.11isExtensible陷阱240

12.1.12getOwnPropertyDescriptor陷阱240

12.1.13ownKeys陷阱241

12.1.14代理陷阱小结242

12.2可撤销代理242

12.3代理陷阱中的约束243

12.3.1apply和construct陷阱的约束243

12.3.2getPrototypeOf陷阱的约束243

12.3.3setPrototypeOf陷阱的约束243

12.3.4isExtensible陷阱的约束244

12.3.5preventExtensible陷阱的约束244

12.3.6get陷阱的约束244

12.3.7set陷阱的约束244

12.3.8defineProperty陷阱的约束244

12.3.9getOwnPropertyDescriptor陷阱的约束245

12.3.10has陷阱的约束245

12.3.11deleteProperty陷阱的约束245

12.3.12ownKeys陷阱的约束245

第13章类246

13.1拥抱类246

13.1.1最小化类提案与安全语法246

13.1.2类的特点247

13.2类语法247

13.3类字段249

13.3.1私有字段250

13.3.2私有字段的限制253

13.3.3静态字段255

13.4类继承256

13.4.1继承目标257

13.4.2子类257

13.4.3构造函数原型链259

13.4.4父类覆写与子类返回260

13.4.5类构造过程260

13.5类静态块261

13.6静态类262

第14章迭代器与生成器264

14.1迭代器264

14.1.1可迭代对象265

14.1.2隐式调用268

14.1.3关闭迭代器269

14.1.4异步迭代271

14.1.5控制迭代272

14.2生成器273

14.2.1生成器函数构造274

14.2.2yield275

14.2.3生成器转移控制权276

14.2.4生成器中的return277

14.2.5异步生成器278

14.2.6生成器作为默认迭代器279

14.3迭代器助手280

14.3.1map()方法280

14.3.2filter()方法281

14.3.3drop()方法281

14.3.4take()方法281

14.3.5flatMap()方法282

14.3.6reduce()方法282

14.3.7forEach()方法283

14.3.8some()和every()方法283

14.3.9find()方法283

14.3.10toArray()方法284

14.3.11from()方法284

14.4联合迭代器285

14.5迭代器序列286

第15章异步编程287

15.1Promise288

15.2thenable289

15.3原型方法290

15.3.1then()方法291

15.3.2catch()方法292

15.3.3finally()方法292

15.4工具方法293

15.4.1创建已决议的Promise294

15.4.2Promise.all()方法294

15.4.3Promise.allSettled()方法295

15.4.4Promise.any()方法295

15.4.5Promise.race()方法296

15.4.6Promise.withResolvers()方法296

15.4.7Promise.try()方法297

15.5异步函数297

15.5.1await299

15.5.2forawaitof300

15.5.3顶层await302

第16章新特性305