深入理解JavaScript特性
內容描述
本書旨在讓讀者輕松學習JavaScript的新進展,包括ES6及後續更新。書中提供了大量實用示例,以循序漸進的方式講解了異步函數、對象解構、動態導入及異步生成器等內容。本書不僅介紹了箭頭函數、解構、模板字面量以及其他語法方面的新元素,還全面展示了ES6引入的流程控制機制,以及如何高效地簡化自己的代碼。本書的討論還涉及ES6內置的新集合類型、使用代理控制屬性訪問、ES6中內置API的改進、CommonJS與ECMAScript模塊的互用性等方面。
目錄大綱
序xi
前言xiii
第1章ECMAScript和JavaScript的未來1
1.1 JavaScript標準簡史1
1.2持續迭代的ECMAScript 3
1.3瀏覽器支持和輔助工具5
1.3.1 Babel轉譯器簡介5
1.3.2使用ESLint提高代碼質量和一致性9
1.4 ES6特性11
1.5 JavaScript的未來12
第2章ES6基礎14
2.1對象字面量14
2.1.1屬性值簡寫14
2.1.2可計算屬性名15
2.1.3方法定義17
2.2箭頭函數18
2.2. 1詞法作用域19
2.2.2箭頭函數的寫法20
2.2.3優點和用例21
2.3解構22
2.3.1對象的解構22
2.3.2數組的解構25
2.3.3函數參數的默認值25
2.3.4函數參數的解構26
2.3.5解構的用例28
2.4剩餘參數和擴展運算符29
2.4.1剩餘參數29
2.4.2擴展運算符30
2.5模板字面量32
2.5.1字符串插值32
2.5.2多行模板字面量33
2.5.3標籤模板35
2.6 let和const聲明37
2.6.1塊級作用域和let聲明38
2.6.2暫時性死區39
2.6.3 const聲明41
2.6.4 const和let的優勢42
第3章類、符號、對象和裝飾器44
3.1類44
3.1.1使用類44
3.1.2類的屬性和方法47
3.1.3類的繼承49
3.2符號51
3.2.1本地符號51
3.2.2符號的實際用法53
3.2.3全局符號註冊表55
3.2.4眾所周知的符號57
3.3對象的內置改進58
3.3.1使用Object.assign擴展對象58
3.3.2使用Object.is進行對像比較61
3.3.3 Object.setPrototypeOf 62
3.4裝飾器63
3.4.1初識JavaScript裝飾器63
3.4.2裝飾器疊加及不變性提醒64
3.4.3用例:C#中的特性64
3.4.4在JavaScript中裝飾屬性66
第4章迭代與流程控制68
4.1 Promise 68
4.1.1快速理解Promise 68
4.1.2 Promise的延續與連綴72
4.1.3創建Promise 76
4.1.4 Promise的狀態78
4.1 .5 Promise#finally提案79
4.1.6 Promise.all和Promise.race 81
4.2迭代器協議與可迭代協議83
4.2.1迭代的原理83
4.2.2無窮序列85
4.2.3迭代對像以生成鍵/值對88
4.2.4打造多功能播放列表90
4.3生成器函數與生成器對象93
4.3.1生成器基礎93
4.3.2手工迭代生成器96
4.3.3將生成器混入可迭代對象97
4.3.4使用生成器遍歷樹99
4.3.5傳遞生成器函數101
4.3.6處理異步流102
4.3.7在生成器上拋出錯誤103
4.3.8代替生成器返回104
4.3.9基於生成器的異步I/O 105
4.4異步函數109
4.4.1各種異步代碼109
4.4.2使用async/await 111
4.4.3並發異步流112
4.4.4錯誤處理113
4.4.5深入理解異步函數114
4.5異步迭代119
4.5.1異步迭代器119
4.5. 2異步生成器120
第5章巧妙使用ES中的集合122
5.1使用ES6 map 124
5.1.1初識ES6 map 124
5.1.2散列映射和DOM元素128
5.2理解和使用WeakMap 130
5.3 ES6中的Set 131
5.4 ES6 WeakSet 133
第6章使用代理控制屬性訪問136
6.1了解代理136
6.1.1捕獲get訪問137
6.1.2捕獲set訪問138
6.1.3通過代理實現模式驗證140
6.2可撤銷代理142
6.3代理捕獲器143
6.3.1 has捕獲器143
6.3.2 deleteProperty捕獲器144
6.3.3 defineProperty捕獲器146
6.3.4 ownKeys捕獲器148
6.4不錯代理捕獲器150
6.4.1 getOwnPropertyDescriptor捕獲器150
6.4.2 apply捕獲器151
6.4.3 construct捕獲器154
6.4.4 getPrototypeOf捕獲器156
6.4.5 setPrototypeOf捕獲器157
6.4.6 preventExtensions捕獲器158
6.4. 7 isExtensible捕獲器159
第7章ES6中內置API的改進161
7.1數字161
7.1.1二進制和八進製字面量161
7.1.2 Number.isNaN 162
7.1.3 Number.isFinite 164
7.1.4 Number.parseInt 165
7.1. 5 Number.parseFloat 166
7.1.6 Number.isInteger 166
7.1.7 Number.EPSILON 167
7.1.8 Number.MAX_SAFE_INTEGER和Number.MIN_SAFE_INTEGER 167
7.1.9 Number.isSafeInteger 168
7.2 Math 170
7.2.1 Math.sign 171
7.2.2 Math.trunc 171
7.2.3 Math.cbrt 171
7.2.4 Math.expm1 172
7.2.5 Math.log1p 172
7.2.6 Math.log10 173
7.2.7 Math.log2 173
7.2.8三角函數174
7.2. 9 Math.hypot 174
7.2.10按位計算助手174
7.3字符串和Unicode 175
7.3.1 String#startsWith 175
7.3.2 String#endsWith 176
7.3.3 String#includes 177
7.3.4 String#repeat 177
7.3.5字符串填充和去空白179
7.3.6 Unicode 180
7.3.7 String.prototype[Symbol.iterator] 181
7.3.8有關分割字形段的提案182
7.3.9 String#codePointAt 183
7.3.10 String.fromCodePoint 184
7.3. 11 Unicode-Aware字符串反轉185
7.3.12 String#normalize 185
7.4正則表達式186
7.4.1粘連修飾符/y 186
7.4.2 Unicode修飾符/u 187
7.4.3具名捕獲組188
7.4.4 Unicode屬性轉義190
7.4.5後行斷言191
7.4.6新的/s(dotAll)修飾符193
7.4.7 String#matchAll 193
7.5 Array 196
7.5.1 Array.from 196
7.5.2 Array.of 198
7.5.3 Array#copyWithin 199
7.5.4 Array#fill 200
7.5.5 Array#find和Array# findIndex 201
7.5.6 Array#keys 201
7.5.7 Array#values 202
7.5.8 Array#entries 202
7.5.9 Array.prototype[Symbol.iterator] 202
第8章JavaScript模塊204
8.1 CommonJS 204
8.2 JavaScript模塊209
8.2. 1嚴格模式209
8.2.2 export語句209
8.2.3 import語句213
8.2.4動態import() 215
8.3 ES模塊的實踐考量216
第9章實用建議219
9.1變量聲明219
9.2模板字面量223
9.3簡寫及對象解構227
9.4剩餘參數和擴展運算符229
9.5函數偏好231
9.6類和代理235
9.7異步代碼流238
9.8複雜性蠕變、抽象及約定241
作者介紹
【譯者簡介】
李松峰
360前端開發專家、前端TC委員、W3C AC代表,奇舞團Web字體服務“奇字庫”作者。
劉冰晶
畢業於北京郵電大學,現為奇舞團前端開發工程師,專注於數據可視化以及前端動畫領域。
高峰
碩士,畢業於中國科學技術大學軟件學院。現為奇虎360前端開發工程師。
【審校簡介】
黃小璐
畢業於華中科技大學計算機學院。現為奇虎360軟件開發工程師。參與翻譯了《高性能HTML5》《移動Web手冊》《大型JavaScript應用很好實踐指南》《Web開發很好不錯指南》等書。
歐雪雯
前端開發工程師,多年從事科技、前端技術領域業餘翻譯工作。