內容簡介
JavaScript這門語言簡單易用,很容易上手,但其語言機制複雜微妙,即使是經驗豐富的JavaScript開發人員,如果沒有認真學習的話也無法真正理解。本套書直面當前JavaScript開發人員不求甚解的大趨勢,深入理解語言內部的機制,全面介紹了JavaScript中常被人誤解和忽視的重要知識點。本書是其下卷,主要介紹了JavaScript入門知識和對ES6及未來發展趨勢的展望。
本書既適合JavaScript語言初學者了解其精髓,又適合經驗豐富的JavaScript開發人員深入學習。
圖書目錄
前言 xi
致謝 xvii
第 一部分 起步上路
序 2
第 1 章 深入編程 4
1.1 代碼 4
1.2 表達式 5
1.3 實踐 6
1.3.1 輸出 7
1.3.2 輸入 8
1.4 運算符 9
1.5 值與類型 11
1.6 代碼注釋 13
1.7 變數 14
1.8 塊 16
1.9 條件判斷 17
1.10 循環 18
1.11 函式 20
1.12 實踐 23
1.13 小結 25
第 2 章 深入JavaScript 26
2.1 值與類型 26
2.1.1 對象 28
2.1.2 內置類型方法 30
2.1.3 值的比較 31
2.2 變數 35
2.3 條件判斷 37
2.4 嚴格模式 39
2.5 作為值的函式 40
2.5.1 立即調用函式表達式 41
2.5.2 閉包 42
2.6 this標識符 44
2.7 原型 46
2.8 舊與新 47
2.8.1 polyfilling 47
2.8.2 transpiling 48
2.9 非JavaScript 49
2.10 小結 50
第 3 章 深入“你不知道的JavaScript”系列 51
3.1 作用域和閉包 51
3.2 this和對象原型 52
3.3 類型和語法 53
3.4 異步和性能 53
3.5 ES6及更新版本 54
3.6 小結 55
第 二部分 ES6及更新版本
序 58
第 1 章 ES·現在與未來 59
1.1 版本 60
1.2 transpiling 61
1.3 小結 63
第 2 章 語法 64
2.1 塊作用域聲明 64
2.1.1 let聲明 65
2.1.2 const聲明 68
2.1.3 塊作用域函式 70
2.2 spread/rest 71
2.3 默認參數值 73
2.4 解構 77
2.4.1 對象屬性複製模式 78
2.4.2 不只是聲明 79
2.4.3 重複賦值 81
2.5 太多,太少,剛剛好 83
2.5.1 默認值賦值 84
2.5.2 嵌套解構 84
2.5.3 解構參數 85
2.6 對象字面量擴展 90
2.6.1 簡潔屬性 90
2.6.2 簡潔方法 90
2.6.3 計算屬性名 95
2.6.4 設定[[Prototype]] 96
2.6.5 super對象 97
2.7 模板字面量 98
2.7.1 插入表達式 99
2.7.2 標籤模板字面量 100
2.8 箭頭函式 103
2.9 for..of循環 109
2.10 正則表達式 111
2.10.1 Unicode標識 111
2.10.2 定點標識 112
2.10.3 正則表達式flags 116
2.11 數字字面量擴展 117
2.12 Unicode 118
2.12.1 支持Unicode的字元串運算 119
2.12.2 字元定位 121
2.12.3 Unicode標識符名 123
2.13 符號 123
2.13.1 符號註冊 125
2.13.2 作為對象屬性的符號 127
2.14 小結 128
第 3 章 代碼組織 129
3.1 疊代器 129
3.1.1 接口 130
3.1.2 next疊代 131
3.1.3 可選的return(..)和throw(..) 132
3.1.4 疊代器循環 133
3.1.5 自定義疊代器 134
3.1.6 疊代器消耗 137
3.2 生成器 138
3.2.1 語法 139
3.2.2 疊代器控制 144
3.2.3 提前完成 147
3.2.4 錯誤處理 149
3.2.5 Transpile生成器 151
3.2.6 生成器使用 152
3.3 模組 153
3.3.1 舊方法 153
3.3.2 前進 154
3.3.3 新方法 156
3.3.4 模組依賴環 164
3.3.5 模組載入 166
3.4 類 167
3.4.1 class 168
3.4.2 extends和super 169
3.4.3 new.target 174
3.4.4 static 175
3.5 小結 176
第 4 章 異步流控制 177
4.1 Promise 177
4.1.1 構造和使用Promise 178
4.1.2 Thenable 180
4.1.3 Promise API 181
4.2 生成器 + Promise 183
4.3 小結 185
第 5 章 集合 187
5.1 TypedArray 187
5.1.1 大小端(Endianness) 188
5.1.2 多視圖 189
5.1.3 帶類數組構造器 190
5.2 Map 192
5.2.1 Map值 194
5.2.2 Map鍵 194
5.3 WeakMap 195
5.4 Set 196
5.5 WeakSet 198
5.6 小結 199
第 6 章 新增API 200
6.1 Array 200
6.1.1 靜態函式Array.of(..) 200
6.1.2 靜態函式Array.from(..) 201
6.1.3 創建數組和子類型 204
6.1.4 原型方法copyWithin(..) 205
6.1.5 原型方法fill(..) 206
6.1.6 原型方法find(..) 206
6.1.7 原型方法findIndex(..) 207
6.1.8 原型方法entries、values、keys 208
6.2 Object 209
6.2.1 靜態函式Object.is(..) 209
6.2.2 靜態函式Object.getOwnPropertySymbols(..) 210
6.2.3 靜態函式Object.setPrototypeOf(..) 210
6.2.4 靜態函式Object.assign(..) 211
6.3 Math 212
6.4 Number 214
6.4.1 靜態屬性 214
6.4.2 靜態函式Number.isNaN(..) 214
6.4.3 靜態函式Number.isFinite(..) 215
6.4.4 整型相關靜態函式 215
6.5 字元串 216
6.5.1 Unicode函式 217
6.5.2 靜態函式String.raw(..) 217
6.5.3 原型函式repeat(..) 217
6.5.4 字元串檢查函式 218
6.6 小結 218
第 7 章 元編程 219
7.1 函式名稱 219
7.2 元屬性 222
7.3 公開符號 223
7.3.1 Symbol.iterator 223
7.3.2 Symbol.toStringTag與Symbol.hasInstance 224
7.3.3 Symbol.species 225
7.3.4 Symbol.toPrimitive 226
7.3.5 正則表達式符號 226
7.3.6 Symbol.isConcatSpreadable 227
7.3.7 Symbol.unscopables 228
7.4 代理 228
7.4.1 代理局限性 231
7.4.2 可取消代理 232
7.4.3 使用代理 233
7.5 Reflect API 240
7.6 特性測試 243
7.7 尾遞歸調用(Tail Call Optimization,TCO) 245
7.7.1 尾調用重寫 247
7.7.2 非TCO最佳化 248
7.7.3 元在何處 250
7.8 小結 251
第 8 章 ES6之後 253
8.1 異步函式 254
8.2 Object.observe(..) 257
8.2.1 自定義改變事件 258
8.2.2 結束觀測 259
8.3 冪運算符 260
8.4 對象屬性與... 260
8.5 Array#includes 261
8.6 SIMD 262
8.7 WebAssembly (WASM) 262
8.8 小結 264