本书的主要内容有: 设置一个高效的开发环境, 包含代码编辑器、lint程序和测试服务器。提高对JavaScript 函数的理解, 包括箭头句法、闭包和生成器。运用面向对象编程概念, 例如类和继承。在JavaScript中处理富媒体, 包括音频、视频和 SVG。处理 HTML 标记和CSS样式。借助Node.js在任何地方使用JavaScript。使用REST、GraphQL和fetch访问及处理远程数据。上手使用流行的应用构建框架Express。如果你大致学了几个月JavaScript, 自己动手尝试过 Node或Web开发, 应该能从本书内容中获益良多。
前言 .1
第一部分 JavaScript 语言
第1 章 搭建开发环境 9
1.1 选择代码编辑器 10
1.2 使用浏览器中的开发者控制台 . 12
1.3 在开发者控制台中运行代码块 . 16
1.4 使用严格模式捕获常见错误 18
1.5 使用Emmet 快捷键填充HTML 样板代码 . 21
1.6 安装npm 包管理器(及 Node.js) . 23
1.7 使用npm 下载包 . 25
1.8 使用npm 更新包 . 30
1.9 设置本地测试服务器 . 31
1.10 使用lint 工具实施代码标准 35
1.11 使用格式化工具保持代码风格一致 . 40
1.12 在JavaScript Playground 中试验 42
第2 章 字符串和正则表达式 47
2.1 检查字符串存在,不为空 48
2.2 把数值转换为格式化字符串 50
2.3 插入特殊字符 53
2.4 插入表情符号 55
2.5 使用模板字面量简化字符串拼接 56
2.6 不区分大小写比较字符串 58
2.7 检查字符串中是否包含指定的子串 60
2.8 替换字符串出现的每一处 61
2.9 把HTML 标签替换为具名实体 62
2.10 使用正则表达式替换字符串中的模式 63
2.11 从字符串中提取列表 67
2.12 查找满足模式的所有内容 . 68
2.13 删除字符串头尾的空白 . 72
2.14 把字符串的第一个字母转换为大写 . 73
2.15 验证电子邮件地址 75
第3 章 数字 77
3.1 生成随机数 . 77
3.2 生成密码学上安全的随机数 79
3.3 四舍五入到指定的小数位 81
3.4 保留小数的精确度 82
3.5 把字符串转换成数字 . 84
3.6 把十进制转换成十六进制 86
3.7 角度和弧度互相转换 . 87
3.8 计算圆弧的长度 88
3.9 使用BigInt 处理特别大的数 . 89
第4 章 日期 92
4.1 获取当前日期和时间 . 92
4.2 把字符串转换成日期 . 94
4.3 在日期上增加天数 96
4.4 比较日期及测试日期是否相同 . 97
4.5 计算两个日期之间的时间间隔 . 99
4.6 把日期值格式化为字符串 . 102
第5 章 数组 105
5.1 检查一个对象是不是数组 . 106
5.2 迭代数组中的所有元素 . 106
5.3 检查两个数组是否相等 . 109
5.4 把数组拆散成单独的变量 . 112
5.5 把数组传给接受一组值的函数 113
5.6 克隆数组 114
5.7 合并两个数组 . 117
5.8 按位置复制数组的一部分 . 119
5.9 提取符合指定条件的数组元素 120
5.10 清空数组 . 121
5.11 去除重复的值 122
5.12 展平二维数组 123
5.13 在数组中搜索完全匹配的元素 125
5.14 在数组中搜索满足指定条件的元素 127
5.15 删除或替换数组元素 128
5.16 按属性值排序对象数组 130
5.17 变换数组中的每一个元素 132
5.18 一次计算合并数组中的全部值 132
5.19 验证数组内容 134
5.20 创建没有重复值的集合 136
5.21 创建使用键索引的元素集合 . 137
第6 章 函数 140
6.1 把一个函数作为参数传给另一个函数 140
6.2 使用箭头函数 . 144
6.3 为参数提供默认值 148
6.4 定义接受无限参数的函数 . 149
6.5 使用具名函数参数 150
6.6 定义在闭包中存储状态的函数 153
6.7 定义可产出多个值的生成器函数 . 155
6.8 使用部分应用技术减少冗余 160
6.9 使用函数绑定修正this 163
6.10 实现递归算法 167
第7 章 对象 170
7.1 检查对象的类型 170
7.2 使用对象字面量打包数据 . 173
7.3 检查对象中有没有某个属性 176
7.4 迭代对象的所有属性 178
7.5 测试空对象 180
7.6 合并两个对象的属性 182
7.7 定制定义属性的方式 183
7.8 阻止修改对象 . 186
7.9 使用代理截取并改变对象上的操作 . 188
7.10 克隆对象 . 191
7.11 深拷贝对象 193
7.12 创建绝对唯一的对象属性键 . 196
7.13 使用Symbol 创建枚举 . 198
第8 章 类 . 201
8.1 创建一个可重用的类 201
8.2 为类添加属性 . 205
8.3 为类提供更好的字符串表示形式 . 211
8.4 使用构造函数模式自定义类 213
8.5 让类中的方法支持串联 . 216
8.6 为类添加静态方法 218
8.7 使用静态方法创建对象 . 221
8.8 从其他类继承功能 223
8.9 使用模块组织JavaScript 类 . 228
第9 章 异步编程 233
9.1 在循环中更新页面 234
9.2 使用返回promise 的函数 . 237
9.3 改造基于回调的异步函数,使用promise 240
9.4 并发执行多个promise 244
9.5 使用await 和async 等待promise 结束 247
9.6 创建异步生成器函数 252
9.7 使用Web 职程执行后台任务 255
9.8 为Web 职程添加进度支持 258
第10 章 错误和测试 262
10.1 捕获并压制错误 262
10.2 捕获不同类型的错误 265
10.3 捕获异步错误 267
10.4 检测未处理的错误 . 269
10.5 抛出标准错误 273
10.6 抛出自定义错误 275
10.7 为代码编写单元测试 277
10.8 跟踪测试代码覆盖率 284
第二部分 浏览器中的JavaScript
第11 章 浏览器工具 . 291
11.1 调试JavaScript 291
11.2 分析运行时性能 293
11.3 找出未使用的JavaScript 代码 . 296
11.4 使用Lighthouse 衡量最佳实践 297
第12 章 处理HTML 301
12.1 获取指定的元素,查找它的父元素和子元素 301
12.2 使用forEach() 遍历querySelectorAll() 获取的结果 . 304
12.3 为元素添加点击功能 305
12.4 查找具有同一属性的全部元素 307
12.5 获取所有特定类型的元素 308
12.6 使用Selectors API 查找所有子元素 . 311
12.7 修改元素的类值 312
12.8 设置元素的样式属性 313
12.9 为新段落添加文本 . 316
12.10 把新元素插入DOM 的特定位置 . 318
12.11 检查有没有勾选复选框 . 319
12.12 对HTML 表格中的值求和 . 320
12.13 删除HTML 表格中的行 324
12.14 隐藏页面中的部分内容 326
12.15 创建悬停弹出信息窗口 328
12.16 验证表单数据 331
12.17 突出显示表单错误并符合无障碍功能要求 . 334
12.18 保障自动更新区域的无障碍功能 . 341
第13 章 获取远程数据 343
13.1 使用Fetch API 请求远程数据 343
13.2 使用XMLHttpRequest . 348
13.3 提交表单 . 350
13.4 从服务器获取数据填充选择列表 354
13.5 解析返回的JSON 359
13.6 获取及解析XML 361
13.7 发送二进制数据,载入图像 . 363
13.8 跨域共享HTTP cookie 364
13.9 使用Websockets 在客户端和服务器之间建立双向通信 . 366
13.10 长时间轮询远程数据源 368
第14 章 数据持久化 371
14.1 使用cookie 持久存储信息 . 371
14.2 使用sessionStorage 在客户端存储数据 375
14.3 使用localStorage 在客户端存储数据 381
14.4 使用IndexedDB 在客户端持久存储大段数据 . 385
14.5 借助代码库简化IndexedDB 操作 389
第15 章 处理媒体文件 394
15.1 为SVG 添加JavaScript 代码 394
15.2 在网页脚本中访问SVG . 398
15.3 使用D3 库创建一个SVG 条形图 400
15.4 在HTML 中集成SVG 和画布元素 404
15.5 音频文件开始播放时运行一个例程 406
15.6 使用JavaScript 控制video 元素 . 408
第16 章 编写Web 应用 . 412
16.1 打包JavaScript 412
16.2 JavaScript 和移动Web . 415
16.3 编写渐进式Web 应用 417
16.4 测试和剖析渐进式Web 应用 426
16.5 获取当前URL 的值 430
16.6 重定向URL 432
16.7 把文本复制到用户的剪贴板 . 433
16.8 在桌面浏览器中实现类似移动设备的通知 435
16.9 在浏览器中加载本地文件 439
16.10 使用Web 组件扩展可能性 442
16.11 选择前端框架. 446
第三部分 Node.js
第17 章 Node 基础 . 451
17.1 使用Node Version Manager 管理Node 版本 451
17.2 响应简单的浏览器请求 454
17.3 使用REPL 以交互的方式尝试Node 代码片段 457
17.4 读写文件数据 460
17.5 通过终端获取输入 . 466
17.6 获取当前脚本的路径 469
17.7 使用Node 计时器,理解Node 事件循环 470
第18 章 Node 模块 . 476
18.1 通过npm 搜索特定的Node 模块 477
18.2 把库转换成Node 模块. 478
18.3 让代码支持多个模块环境 480
18.4 创建可以安装的Node 模块 484
18.5 编写跨平台库 490
18.6 对模块做单元测试 . 495
第19 章 管理Node . 499
19.1 使用环境变量 499
19.2 管理回调地狱 501
19.3 在Node 应用中调取命令行功能 . 505
19.4 传递命令行参数 508
19.5 借助Commander 创建命令行实用程序 509
19.6 让Node 实例保持运行. 512
19.7 在本地开发过程中监控应用变化,适时重启 514
19.8 定期运行重复性任务 516
19.9 测试WebSockets 应用的性能和功能 518
第20 章 远程数据 . 520
20.1 获取远程数据 520
20.2 屏幕爬取 . 522
20.3 通过REST 式API 获取JSON 格式数据 524
第21 章 使用Express 构建Web 应用 . 528
21.1 使用Express 响应请求 528
21.2 使用 Express-Generator 532
21.3 路由 539
21.4 使用OAuth 541
21.5 使用Passport.js 进行OAuth 2 用户验证 551
21.6 伺服格式化数据 557
21.7 构建一个REST 式API 559
21.8 构建一个GraphQL API 563"