本書的主要內(nèi)容有: 設(shè)置一個(gè)高效的開(kāi)發(fā)環(huán)境, 包含代碼編輯器、lint程序和測(cè)試服務(wù)器。提高對(duì)JavaScript 函數(shù)的理解, 包括箭頭句法、閉包和生成器。運(yùn)用面向?qū)ο缶幊谈拍? 例如類和繼承。在JavaScript中處理富媒體, 包括音頻、視頻和 SVG。處理 HTML 標(biāo)記和CSS樣式。借助Node.js在任何地方使用JavaScript。使用REST、GraphQL和fetch訪問(wèn)及處理遠(yuǎn)程數(shù)據(jù)。上手使用流行的應(yīng)用構(gòu)建框架Express。如果你大致學(xué)了幾個(gè)月JavaScript, 自己動(dòng)手嘗試過(guò) Node或Web開(kāi)發(fā), 應(yīng)該能從本書內(nèi)容中獲益良多。
前言 .1
第一部分 JavaScript 語(yǔ)言
第1 章 搭建開(kāi)發(fā)環(huán)境 9
1.1 選擇代碼編輯器 10
1.2 使用瀏覽器中的開(kāi)發(fā)者控制臺(tái) . 12
1.3 在開(kāi)發(fā)者控制臺(tái)中運(yùn)行代碼塊 . 16
1.4 使用嚴(yán)格模式捕獲常見(jiàn)錯(cuò)誤 18
1.5 使用Emmet 快捷鍵填充HTML 樣板代碼 . 21
1.6 安裝npm 包管理器(及 Node.js) . 23
1.7 使用npm 下載包 . 25
1.8 使用npm 更新包 . 30
1.9 設(shè)置本地測(cè)試服務(wù)器 . 31
1.10 使用lint 工具實(shí)施代碼標(biāo)準(zhǔn) 35
1.11 使用格式化工具保持代碼風(fēng)格一致 . 40
1.12 在JavaScript Playground 中試驗(yàn) 42
第2 章 字符串和正則表達(dá)式 47
2.1 檢查字符串存在,不為空 48
2.2 把數(shù)值轉(zhuǎn)換為格式化字符串 50
2.3 插入特殊字符 53
2.4 插入表情符號(hào) 55
2.5 使用模板字面量簡(jiǎn)化字符串拼接 56
2.6 不區(qū)分大小寫比較字符串 58
2.7 檢查字符串中是否包含指定的子串 60
2.8 替換字符串出現(xiàn)的每一處 61
2.9 把HTML 標(biāo)簽替換為具名實(shí)體 62
2.10 使用正則表達(dá)式替換字符串中的模式 63
2.11 從字符串中提取列表 67
2.12 查找滿足模式的所有內(nèi)容 . 68
2.13 刪除字符串頭尾的空白 . 72
2.14 把字符串的第一個(gè)字母轉(zhuǎn)換為大寫 . 73
2.15 驗(yàn)證電子郵件地址 75
第3 章 數(shù)字 77
3.1 生成隨機(jī)數(shù) . 77
3.2 生成密碼學(xué)上安全的隨機(jī)數(shù) 79
3.3 四舍五入到指定的小數(shù)位 81
3.4 保留小數(shù)的精確度 82
3.5 把字符串轉(zhuǎn)換成數(shù)字 . 84
3.6 把十進(jìn)制轉(zhuǎn)換成十六進(jìn)制 86
3.7 角度和弧度互相轉(zhuǎn)換 . 87
3.8 計(jì)算圓弧的長(zhǎng)度 88
3.9 使用BigInt 處理特別大的數(shù) . 89
第4 章 日期 92
4.1 獲取當(dāng)前日期和時(shí)間 . 92
4.2 把字符串轉(zhuǎn)換成日期 . 94
4.3 在日期上增加天數(shù) 96
4.4 比較日期及測(cè)試日期是否相同 . 97
4.5 計(jì)算兩個(gè)日期之間的時(shí)間間隔 . 99
4.6 把日期值格式化為字符串 . 102
第5 章 數(shù)組 105
5.1 檢查一個(gè)對(duì)象是不是數(shù)組 . 106
5.2 迭代數(shù)組中的所有元素 . 106
5.3 檢查兩個(gè)數(shù)組是否相等 . 109
5.4 把數(shù)組拆散成單獨(dú)的變量 . 112
5.5 把數(shù)組傳給接受一組值的函數(shù) 113
5.6 克隆數(shù)組 114
5.7 合并兩個(gè)數(shù)組 . 117
5.8 按位置復(fù)制數(shù)組的一部分 . 119
5.9 提取符合指定條件的數(shù)組元素 120
5.10 清空數(shù)組 . 121
5.11 去除重復(fù)的值 122
5.12 展平二維數(shù)組 123
5.13 在數(shù)組中搜索完全匹配的元素 125
5.14 在數(shù)組中搜索滿足指定條件的元素 127
5.15 刪除或替換數(shù)組元素 128
5.16 按屬性值排序?qū)ο髷?shù)組 130
5.17 變換數(shù)組中的每一個(gè)元素 132
5.18 一次計(jì)算合并數(shù)組中的全部值 132
5.19 驗(yàn)證數(shù)組內(nèi)容 134
5.20 創(chuàng)建沒(méi)有重復(fù)值的集合 136
5.21 創(chuàng)建使用鍵索引的元素集合 . 137
第6 章 函數(shù) 140
6.1 把一個(gè)函數(shù)作為參數(shù)傳給另一個(gè)函數(shù) 140
6.2 使用箭頭函數(shù) . 144
6.3 為參數(shù)提供默認(rèn)值 148
6.4 定義接受無(wú)限參數(shù)的函數(shù) . 149
6.5 使用具名函數(shù)參數(shù) 150
6.6 定義在閉包中存儲(chǔ)狀態(tài)的函數(shù) 153
6.7 定義可產(chǎn)出多個(gè)值的生成器函數(shù) . 155
6.8 使用部分應(yīng)用技術(shù)減少冗余 160
6.9 使用函數(shù)綁定修正this 163
6.10 實(shí)現(xiàn)遞歸算法 167
第7 章 對(duì)象 170
7.1 檢查對(duì)象的類型 170
7.2 使用對(duì)象字面量打包數(shù)據(jù) . 173
7.3 檢查對(duì)象中有沒(méi)有某個(gè)屬性 176
7.4 迭代對(duì)象的所有屬性 178
7.5 測(cè)試空對(duì)象 180
7.6 合并兩個(gè)對(duì)象的屬性 182
7.7 定制定義屬性的方式 183
7.8 阻止修改對(duì)象 . 186
7.9 使用代理截取并改變對(duì)象上的操作 . 188
7.10 克隆對(duì)象 . 191
7.11 深拷貝對(duì)象 193
7.12 創(chuàng)建絕對(duì)唯一的對(duì)象屬性鍵 . 196
7.13 使用Symbol 創(chuàng)建枚舉 . 198
第8 章 類 . 201
8.1 創(chuàng)建一個(gè)可重用的類 201
8.2 為類添加屬性 . 205
8.3 為類提供更好的字符串表示形式 . 211
8.4 使用構(gòu)造函數(shù)模式自定義類 213
8.5 讓類中的方法支持串聯(lián) . 216
8.6 為類添加靜態(tài)方法 218
8.7 使用靜態(tài)方法創(chuàng)建對(duì)象 . 221
8.8 從其他類繼承功能 223
8.9 使用模塊組織JavaScript 類 . 228
第9 章 異步編程 233
9.1 在循環(huán)中更新頁(yè)面 234
9.2 使用返回promise 的函數(shù) . 237
9.3 改造基于回調(diào)的異步函數(shù),使用promise 240
9.4 并發(fā)執(zhí)行多個(gè)promise 244
9.5 使用await 和async 等待promise 結(jié)束 247
9.6 創(chuàng)建異步生成器函數(shù) 252
9.7 使用Web 職程執(zhí)行后臺(tái)任務(wù) 255
9.8 為Web 職程添加進(jìn)度支持 258
第10 章 錯(cuò)誤和測(cè)試 262
10.1 捕獲并壓制錯(cuò)誤 262
10.2 捕獲不同類型的錯(cuò)誤 265
10.3 捕獲異步錯(cuò)誤 267
10.4 檢測(cè)未處理的錯(cuò)誤 . 269
10.5 拋出標(biāo)準(zhǔn)錯(cuò)誤 273
10.6 拋出自定義錯(cuò)誤 275
10.7 為代碼編寫單元測(cè)試 277
10.8 跟蹤測(cè)試代碼覆蓋率 284
第二部分 瀏覽器中的JavaScript
第11 章 瀏覽器工具 . 291
11.1 調(diào)試JavaScript 291
11.2 分析運(yùn)行時(shí)性能 293
11.3 找出未使用的JavaScript 代碼 . 296
11.4 使用Lighthouse 衡量最佳實(shí)踐 297
第12 章 處理HTML 301
12.1 獲取指定的元素,查找它的父元素和子元素 301
12.2 使用forEach() 遍歷querySelectorAll() 獲取的結(jié)果 . 304
12.3 為元素添加點(diǎn)擊功能 305
12.4 查找具有同一屬性的全部元素 307
12.5 獲取所有特定類型的元素 308
12.6 使用Selectors API 查找所有子元素 . 311
12.7 修改元素的類值 312
12.8 設(shè)置元素的樣式屬性 313
12.9 為新段落添加文本 . 316
12.10 把新元素插入DOM 的特定位置 . 318
12.11 檢查有沒(méi)有勾選復(fù)選框 . 319
12.12 對(duì)HTML 表格中的值求和 . 320
12.13 刪除HTML 表格中的行 324
12.14 隱藏頁(yè)面中的部分內(nèi)容 326
12.15 創(chuàng)建懸停彈出信息窗口 328
12.16 驗(yàn)證表單數(shù)據(jù) 331
12.17 突出顯示表單錯(cuò)誤并符合無(wú)障礙功能要求 . 334
12.18 保障自動(dòng)更新區(qū)域的無(wú)障礙功能 . 341
第13 章 獲取遠(yuǎn)程數(shù)據(jù) 343
13.1 使用Fetch API 請(qǐng)求遠(yuǎn)程數(shù)據(jù) 343
13.2 使用XMLHttpRequest . 348
13.3 提交表單 . 350
13.4 從服務(wù)器獲取數(shù)據(jù)填充選擇列表 354
13.5 解析返回的JSON 359
13.6 獲取及解析XML 361
13.7 發(fā)送二進(jìn)制數(shù)據(jù),載入圖像 . 363
13.8 跨域共享HTTP cookie 364
13.9 使用Websockets 在客戶端和服務(wù)器之間建立雙向通信 . 366
13.10 長(zhǎng)時(shí)間輪詢遠(yuǎn)程數(shù)據(jù)源 368
第14 章 數(shù)據(jù)持久化 371
14.1 使用cookie 持久存儲(chǔ)信息 . 371
14.2 使用sessionStorage 在客戶端存儲(chǔ)數(shù)據(jù) 375
14.3 使用localStorage 在客戶端存儲(chǔ)數(shù)據(jù) 381
14.4 使用IndexedDB 在客戶端持久存儲(chǔ)大段數(shù)據(jù) . 385
14.5 借助代碼庫(kù)簡(jiǎn)化IndexedDB 操作 389
第15 章 處理媒體文件 394
15.1 為SVG 添加JavaScript 代碼 394
15.2 在網(wǎng)頁(yè)腳本中訪問(wèn)SVG . 398
15.3 使用D3 庫(kù)創(chuàng)建一個(gè)SVG 條形圖 400
15.4 在HTML 中集成SVG 和畫布元素 404
15.5 音頻文件開(kāi)始播放時(shí)運(yùn)行一個(gè)例程 406
15.6 使用JavaScript 控制video 元素 . 408
第16 章 編寫Web 應(yīng)用 . 412
16.1 打包JavaScript 412
16.2 JavaScript 和移動(dòng)Web . 415
16.3 編寫漸進(jìn)式Web 應(yīng)用 417
16.4 測(cè)試和剖析漸進(jìn)式Web 應(yīng)用 426
16.5 獲取當(dāng)前URL 的值 430
16.6 重定向URL 432
16.7 把文本復(fù)制到用戶的剪貼板 . 433
16.8 在桌面瀏覽器中實(shí)現(xiàn)類似移動(dòng)設(shè)備的通知 435
16.9 在瀏覽器中加載本地文件 439
16.10 使用Web 組件擴(kuò)展可能性 442
16.11 選擇前端框架. 446
第三部分 Node.js
第17 章 Node 基礎(chǔ) . 451
17.1 使用Node Version Manager 管理Node 版本 451
17.2 響應(yīng)簡(jiǎn)單的瀏覽器請(qǐng)求 454
17.3 使用REPL 以交互的方式嘗試Node 代碼片段 457
17.4 讀寫文件數(shù)據(jù) 460
17.5 通過(guò)終端獲取輸入 . 466
17.6 獲取當(dāng)前腳本的路徑 469
17.7 使用Node 計(jì)時(shí)器,理解Node 事件循環(huán) 470
第18 章 Node 模塊 . 476
18.1 通過(guò)npm 搜索特定的Node 模塊 477
18.2 把庫(kù)轉(zhuǎn)換成Node 模塊. 478
18.3 讓代碼支持多個(gè)模塊環(huán)境 480
18.4 創(chuàng)建可以安裝的Node 模塊 484
18.5 編寫跨平臺(tái)庫(kù) 490
18.6 對(duì)模塊做單元測(cè)試 . 495
第19 章 管理Node . 499
19.1 使用環(huán)境變量 499
19.2 管理回調(diào)地獄 501
19.3 在Node 應(yīng)用中調(diào)取命令行功能 . 505
19.4 傳遞命令行參數(shù) 508
19.5 借助Commander 創(chuàng)建命令行實(shí)用程序 509
19.6 讓Node 實(shí)例保持運(yùn)行. 512
19.7 在本地開(kāi)發(fā)過(guò)程中監(jiān)控應(yīng)用變化,適時(shí)重啟 514
19.8 定期運(yùn)行重復(fù)性任務(wù) 516
19.9 測(cè)試WebSockets 應(yīng)用的性能和功能 518
第20 章 遠(yuǎn)程數(shù)據(jù) . 520
20.1 獲取遠(yuǎn)程數(shù)據(jù) 520
20.2 屏幕爬取 . 522
20.3 通過(guò)REST 式API 獲取JSON 格式數(shù)據(jù) 524
第21 章 使用Express 構(gòu)建Web 應(yīng)用 . 528
21.1 使用Express 響應(yīng)請(qǐng)求 528
21.2 使用 Express-Generator 532
21.3 路由 539
21.4 使用OAuth 541
21.5 使用Passport.js 進(jìn)行OAuth 2 用戶驗(yàn)證 551
21.6 伺服格式化數(shù)據(jù) 557
21.7 構(gòu)建一個(gè)REST 式API 559
21.8 構(gòu)建一個(gè)GraphQL API 563"