第1章 ECMAScript简介 1
1.1 概述 1
1.1.1 ECMAScript各版本 1
1.1.2 关于JavaScript 2
1.1.3 其他脚本语言 2
1.2 语法的实现 2
1.2.1 源代码 2
1.2.2 语句 3
1.2.3 表达式 5
1.2.4 子程序 10
1.2.5 注释 11
1.2.6 关键字 11
1.3 开发环境 12
1.3.1 浏览器 13
1.3.2 Node.js 14
1.3.3 其他JavaScript Shell 14
1.4 练习题 15
第2章 表达式与运算符 17
2.1 操作数 17
2.1.1 常量(ES6) 17
2.1.2 变量(ES6) 18
2.1.3 子表达式 23
2.1.4 函数的返回值 25
2.2 运算符 26
2.2.1 算术运算符(ES7) 27
2.2.2 赋值运算符 30
2.2.3 比较运算符 33
2.2.4 逻辑运算符 34
2.2.5 条件运算符 36
2.2.6 类型运算符 37
2.2.7 按位运算符 41
2.2.8 括号运算符 46
2.2.9 扩展运算符(ES6) 49
2.2.10 逗号运算符 51
2.2.11 删除运算符 51
2.2.12 运算符的优先级(ES6) 53
2.3 练习题 55
第3章 数据类型 57
3.1 数值类型 57
3.1.1 2n进制的字面量(ES6) 57
3.1.2 数值的比较(ES6) 58
3.1.3 数值的正负符号(ES6) 59
3.1.4 数值的截断(ES6) 60
3.1.5 数值的特殊格式(ECMA-402) 63
3.1.6 整数值的安全范围(ES6) 66
3.2 布尔类型 68
3.3 数组类型 70
3.4 对象类型 73
3.5 字符串类型 75
3.5.1 一般字符串 75
3.5.2 格式化字符串(ES6) 77
3.5.3 日期与时间格式的字符串(ES6) 80
3.6 集合与地图类型 82
3.6.1 集合类型(ES6) 82
3.6.2 地图类型(ES6) 84
3.7 数据类型的转换(ES6) 85
3.8 练习题 88
第4章 条件和循环语句 90
4.1 条件语句 90
4.1.1 if语句 90
4.1.2 switch语句 94
4.2 循环语句 96
4.2.1 for相关语句(ES6) 96
4.2.2 while相关语句 104
4.2.3 break与continue语句 106
4.3 练习题 108
第5章 函数与方法 110
5.1 函数的定义 110
5.1.1 不同形式的函数(ES6) 110
5.1.2 函数名称(ES6) 124
5.1.3 参数(ES6) 125
5.1.4 主体 132
5.1.5 返回数据与void关键字(ES6) 135
5.1.6 定义的位置(ES6) 137
5.1.7 函数的调用形式(ES6) 139
5.2 生成器 142
5.2.1 迭代器协议与生成器(ES6) 142
5.2.2 生成器函数的定义和用法(ES6) 143
5.3 搭配Promise对象 144
5.3.1 Promise对象的用法(ES6、ES9) 144
5.3.2 聚集多个Promise对象(ES6) 148
5.3.3 异步函数与等待表达式(ES8) 154
5.4 练习题 156
第6章 处理数值 159
6.1 Number对象的内置属性 159
6.1.1 最大的正数和安全整数(ES6) 159
6.1.2 最小的正数和安全整数(ES6) 160
6.1.3 正负无穷值 162
6.1.4 非数值的判断(ES6) 162
6.1.5 浮点数运算的误差值(ES6) 166
6.2 Number对象的内置函数 167
6.2.1 转换为特定进制的数码字符串 167
6.2.2 处理小数格式 170
6.2.3 转换为数值 172
6.2.4 判断是否为整数或有限数(ES6) 175
6.3 Math对象 177
6.3.1 Math对象的常量属性 177
6.3.2 Math对象的函数(ES6) 178
6.4 练习题 189
第7章 处理字符串 190
7.1 String对象 190
7.1.1 子字符串的索引值 190
7.1.2 特定模式的子字符串的搜索(ES6) 192
7.1.3 子字符串的获取 194
7.1.4 子字符串的替换 196
7.1.5 字符串的大小写转换 198
7.1.6 不同字符串的连接 199
7.1.7 字符串的重复连接 200
7.1.8 字符串的分割 200
7.1.9 特定字符和Unicode数码的双向转换(ES6) 202
7.1.10 重复填充子字符串于扩充后的字符串中(ES8) 204
7.2 将冗长的字符串分割为多行(ES6) 205
7.3 字符串的扩展运算(ES6) 207
7.4 字符串的插值格式化(ES6) 207
7.5 原始字符串(ES6) 210
7.6 正则表达式与黏性匹配(ES6) 211
7.7 万国码字面量(ES6) 214
7.8 练习题 216
第8章 处理数组 217
8.1 Array对象 217
8.1.1 创建特定数组的副本(ES6) 217
8.1.2 创建来自可迭代对象的新数组(ES6) 220
8.1.3 数组元素数据所构成的字符串 223
8.1.4 数组元素的放入和取出 224
8.1.5 新增或删除数组的多个元素 226
8.1.6 合并多个数组 227
8.1.7 切割数组 228
8.1.8 寻找符合特定条件的数组元素(ES6) 229
8.1.9 自我复制并覆盖数组的部分元素(ES6) 230
8.1.10 判断数组各元素是否符合特定条件 232
8.1.11 数组部分元素的填充(ES6) 233
8.1.12 筛选出符合特定条件的数组元素(ES6) 235
8.1.13 循环访问数组各元素 236
8.1.14 判断是否为数组的实例 237
8.1.15 访问并渐次处理数组各元素的数据 239
8.1.16 反转数组各元素的顺序 244
8.1.17 数组各元素的重新排序 245
8.1.18 判断特定元素的存在性(ES7) 246
8.2 数组的扩展运算(ES6) 248
8.3 数组元素的匹配(ES6) 249
8.4 数据类型化的按位数组(ES6) 250
8.5 练习题 252
第9章 处理自定义对象 253
9.1 自定义对象的属性名称、属性数据与副本 253
9.1.1 对象属性的名称或数据所构成的数组(ES8) 253
9.1.2 精细创建特定对象实例的副本 255
9.2 自定义对象实例之间的相同性与合并 258
9.2.1 判断两个对象实例的数据是否完全相同(ES6) 258
9.2.2 合并多个对象实例的所有成员(ES6) 260
9.3 对象实例的简短自定义语法(ES6) 261
9.4 自定义对象实例的动态成员名称(ES6) 262
9.5 对象实例的匹配(ES9) 262
9.6 练习题 264
第10章 处理日期和时间 265
10.1 处理日期 265
10.1.1 获取日期相关数据 265
10.1.2 设置日期相关数据 267
10.1.3 带有日期的格式化字符串 268
10.2 处理时间 270
10.2.1 获取时间相关数据 270
10.2.2 设置时间相关数据 272
10.2.3 带有时间的格式化字符串 274
10.2.4 处理纪元时间至今的毫秒数(ES6) 275
10.3 练习题 277
第11章 DOM的事件处理(一) 278
11.1 鼠标事件 278
11.1.1 单击和双击事件 278
11.1.2 上下文菜单事件 281
11.1.3 鼠标按下与松开事件 282
11.1.4 鼠标指针相关进出事件 284
11.1.5 鼠标移动事件 287
11.2 键盘事件 289
11.2.1 按压与按下按键事件 289
11.2.2 松开按键事件 289
11.3 网页内容的装卸事件 290
11.3.1 出现错误事件 290
11.3.2 加载和页面显示事件 292
11.3.3 卸载和页面隐藏事件 294
11.3.4 先于卸载事件 295
11.3.5 网址散列变化事件 296
11.3.6 滚动事件 298
11.4 表单事件 299
11.4.1 内容变化事件 299
11.4.2 获取和失去焦点相关事件 300
11.4.3 输入事件 302
11.4.4 无效事件 303
11.4.5 重置事件 304
11.4.6 搜索事件 306
11.4.7 选定文本事件 307
11.4.8 提交事件 308
11.5 练习题 309
第12章 DOM的事件处理(二) 311
12.1 拖动事件 311
12.1.1 正在拖动事件 311
12.1.2 拖动结束事件 313
12.1.3 拖动进入事件 315
12.1.4 拖动离开事件 316
12.1.5 拖动悬停事件 318
12.1.6 拖动开始事件 319
12.1.7 放下事件 321
12.2 剪贴板事件 323
12.2.1 复制事件 324
12.2.2 剪切事件 325
12.2.3 粘贴事件 325
12.3 视频和音频事件 325
12.3.1 加载相关事件 326
12.3.2 清空事件 328
12.3.3 播放结束事件 329
12.3.4 异常相关事件 330
12.3.5 播放与暂停相关事件 331
12.3.6 播放速率变化事件 332
12.3.7 播放位置变化相关事件 333
12.3.8 音量变化事件 335
12.3.9 缓冲等待事件 335
12.4 动画及过渡事件 336
12.4.1 动画相关事件 336
12.4.2 过渡结束事件 338
12.5 其他事件 339
12.5.1 details元素实例的切换事件 340
12.5.2 鼠标滚轮事件 341
12.5.3 触摸相关事件 342
12.5.4 接收服务器数据相关事件 344
12.6 练习题 346
第13章 Reflect对象 347
13.1 Reflect对象介绍(ES6) 347
13.2 间接应用特定函数(ES6) 349
13.3 创建特定对象的实例(ES6) 351
13.4 精细定义新属性(ES6) 353
13.5 删除特定属性(ES6) 354
13.6 获取特定属性的数据(ES6) 355
13.7 返回特定属性的描述器(ES8) 356
13.8 返回特定对象的原型(ES6) 359
13.9 判断特定属性的存在性(ES6) 360
13.10 判断与设置特定对象的扩展性(ES6) 361
13.11 简易定义新属性(ES6) 363
13.12 重新设置特定对象的原型(ES6) 365
13.13 返回与列举特定对象的自定义属性(ES6) 367
13.14 练习题 370
第14章 Proxy对象、Intl对象和navigator对象实例 371
14.1 Proxy对象 371
14.1.1 创建访问代理机制的构造函数(ES6) 372
14.1.2 确定被代理的特定对象(ES6) 373
14.1.3 自定义代理函数(ES6) 373
14.1.4 调试访问代理机制(ES6) 375
14.2 Intl对象 376
14.2.1 精确比较语言敏感的字符串(ECMA-402) 376
14.2.2 语言敏感的日期与时间格式(ECMA-402) 378
14.2.3 语言敏感的数值格式(ECMA-402) 379
14.2.4 返回规范化语言环境名称(ECMA-402) 380
14.3 window.navigator对象实例 381
14.3.1 获取浏览器相关信息 381
14.3.2 获取当前地理定位相关数据 383
14.4 练习题 385
第15章 window.document对象实例 386
15.1 返回焦点所在的元素 386
15.2 附加事件处理器至特定元素 388
15.3 收养特定节点 390
15.4 返回所有锚点元素构成的集合 392
15.5 返回当前网址的相关属性 393
15.6 在当前网页中动态生成HTML源代码 394
15.7 内含特定服务器相关数据的cookie 396
15.8 返回当前网页编码字符集的名称 398
15.9 创建代表新属性的节点 398
15.10 创建代表新注释的节点 399
15.11 创建代表新片段或新元素的节点 400
15.12 创建代表新文本的节点 402
15.13 返回当前网页的根元素 404
15.14 访问当前网址的域名 405
15.15 返回所有embed元素构成的集合 406
15.16 返回所有form元素实例构成的集合 407
15.17 返回特定身份识别码的元素实例 408
15.18 返回被设置带有特定CSS类名的所有元素实例的集合 411
15.19 返回特定标签名称的所有元素实例的集合 414
15.20 判断当前网页是否存在焦点 416
15.21 返回当前网页的head元素实例 417
15.22 返回当前网页所有image元素实例的集合 418
15.23 创建当前网页或者子网页里的特定节点实例的副本 420
15.24 获取当前网页的最近被修改的日期和时间 423
15.25 返回当前网页中的所有超链接元素实例的集合 425
15.26 返回特定CSS选择器名称对应的元素实例或集合 426
15.27 返回和处置当前网页的加载状态 429
15.28 返回跳转前的网址 430
15.29 解除已被附加的事件处理器 432
15.30 返回当前网页中的所有script元素实例构成的集合 433
15.31 访问当前网页的标题文本 434
15.32 练习题 435
第16章 DOM的元素实例 437
16.1 设置焦点跳转至特定元素实例上的快捷键 437
16.2 创建特定元素实例的动画效果(Web Animations) 439
16.3 添加新元素实例和访问特定元素实例的所有属性 441
16.4 使得特定元素实例失去和获取焦点 445
16.5 访问子节点或子元素的实例 447
16.6 访问被应用在特定元素实例的所有CSS类名 450
16.7 模拟鼠标单击特定元素实例的动作 454
16.8 获取特定元素的尺寸、坐标与可定位的上层元素 455
16.9 比较两个元素之间的位置关系 458
16.10 判断是否存在特定子元素或可被编辑 461
16.11 访问特定元素实例的文本被书写的方向 463
16.12 返回头尾的子节点实例或子元素实例 464
16.13 访问或删除特定元素实例的特定属性 467
16.14 访问特定元素实例的常见属性的数据 469
16.15 判断是否存在任何子节点实例 472
16.16 在特定子节点实例之前新增另一子节点实例 473
16.17 判断两个节点实例的内容是否完全相同 475
16.18 返回下一个或上一个兄弟节点实例 478
16.19 返回特定节点实例的相关数据 479
16.20 合并多个相邻的文本子节点实例 481
16.21 返回父节点实例 484
16.22 删除或替换子节点实例 486
16.23 获取滚动条的相关数据 488
16.24 练习题 491
第17章 BOM的多个对象实例 492
17.1 window对象实例 492
17.1.1 显示多种对话框与搜索特定文本 492
17.1.2 滚动至坐标或滚动特定距离 496
17.2 screen对象实例 498
17.3 history对象实例 499
17.4 location对象实例 501
17.5 练习题 503
第18章 类 504
18.1 类的定义和继承 504
18.1.1 类的定义(ES6) 505
18.1.2 类的继承(ES6) 507
18.2 类的静态成员 508
18.2.1 静态成员的概念和定义(ES6) 509
18.2.2 静态成员的运用(ES6) 511
18.3 类的设置器和取得器 511
18.3.1 设置器和取得器的概念和定义(ES6) 512
18.3.2 设置器和取得器的运用(ES6) 513
18.4 练习题 514
第19章 错误处理 516
19.1 异常错误的种类 516
19.1.1 语法错误 517
19.1.2 数据类型错误 518
19.1.3 评估错误 520
19.1.4 范围错误 522
19.1.5 引用错误 524
19.1.6 网址在编码或解码上的错误 526
19.1.7 逻辑错误 527
19.2 处置特定异常错误 529
19.2.1 试验与捕获特定异常错误 529
19.2.2 抛出自定义的异常错误 530
19.3 调试机制 531
19.3.1 严格模式 531
19.3.2 源代码的断点设置和逐句执行 535
19.4 练习题 536
第20章 数据的验证与传输 538
20.1 HTML表单的内置验证 538
20.1.1 必填验证 538
20.1.2 字符个数和数值范围的验证 540
20.2 自定义的验证 542
20.2.1 文本字段的模式验证 544
20.2.2 JavaScript源代码实现的验证 545
20.3 异步数据传输 548
20.3.1 AJAX的工作原理 549
20.3.2 AJAX的编程方式 552
20.4 练习题 561
第21章 响应式机制 563
21.1 通过CSS语法的版本 563
21.1.1 页面的元信息 565
21.1.2 媒体查询 565
21.2 通过JavaScript语法的版本 567
21.2.1 简易判断窗口尺寸的版本 572
21.2.2 直接变更CSS规则的版本 575
21.3 源代码的加密 579
21.3.1 改写HTML与CSS成为JavaScript源代码 580
21.3.2 JavaScript源代码的全数加密 585
21.4 练习题 586
附录 练习题答案 588