深入理解 ES6
內容描述
ES6是迄今為止JavaScript內核首當其沖的一次重大更新。
本書是領域大家Nicholas C. Zakas撰寫的一份ES6的完整指南,書中詳細講解了ES 6在JavaScript對象類型、語法及其他方面激動人心的改變。
每一章都含有可運行於任何JavaScript環境的示例代碼,你可以利用這些代碼測試、理解ES6中的新功能。
無論你是Web開發者還是Node.js開發者,都可以通過本書來更好地理解和運用ES6,或是順利地從ES5遷移到ES6。
目錄大綱
第1章塊級作用域綁定1
var聲明及變量提升(Hoisting)機制1
塊級聲明3
-- let聲明3
--禁止重聲明4
-- const聲明4
--臨時死區(Temporal Dead Zone) 6
循環中的塊作用域綁定7
--循環中的函數8
--循環中的let聲明9
--循環中的const聲明10
全局塊作用域綁定12
塊級綁定最佳實踐的進化13
小結13
第2章字符串和正則表達式14
更好的Unicode支持14
-- UTF-16碼位15
-- codePointAt()方法16
-- String.fromCodePoint()方法17
-- normalize()方法17
- -正則表達式u修飾符19
其他字符串變更21
--字符串中的子串識別21
-- repeat()方法22
其他正則表達式語法變更23
--正則表達式y修飾符23
--正則表達式的複制26
-- flags屬性27
模板字面量28
--基礎語法28
--多行字符串29
--字符串佔位符31
--標籤模板32
小結36
第3章函數37
函數形參的默認值37
--在ECMAScript 5中模擬默認參數38
-- ECMAScript 6中的默認參數值38
--默認參數值對arguments對 象的影響40
--默認參數表達式42
--默認參數的臨時死區44
處理無命名參數46
-- ECMAScript 5中的無命名參數46
--不定參數47
增強的Function構造函數49
展開運算符50
name屬性52
--如何選擇合適的名稱52
-- name屬性的特殊情況52
明確函數的多重用途54
--在ECMAScript 5中判斷函數被調用的方法54
--元屬性(Metaproperty)new.target 55
塊級函數57
--塊級函數的使用場景58
--非嚴格模式下的塊級函數58
箭頭函數59
--箭頭函數語法60
--創建立即執行函數表達式62
--箭頭函數沒有this綁定63
--箭頭函數和數組65
--箭頭函數沒有arguments綁定66
--箭頭函數的辨識方法66
尾調用優化67
-- ECMAScript 6中的尾調用優化68
--如何利用尾調用優化69
小結71
第4章擴展對象的功能性72
對像類別72
對象字面量語法擴展73
--屬性初始值的簡寫73
--對象方法的簡寫語法74
--可計算屬性名(Computed Property Name) 75
新增方 法76
-- Object.is()方法76
-- Object.assign()方法77
重複的對象字面量屬性80
自有屬性枚舉順序81
增強對象原型82
--改變對象的原型82
--簡化原型訪問的Super引用83
正式的方法定義86
小結88
第5章解構:使數據訪問更便捷89
為何使用解構功能89
對象解構90
--解構賦值91
--默認值92
--為非同名局部變量賦值93 - -嵌套對象解構94
數組解構96
--解構賦值97
--默認值99
--嵌套數組解構99
--不定元素99
混合解構101
解構參數102
--必須傳值的解構參數103
--解構參數的默認值104
小結106
第6章Symbol和Symbol屬性107
創建Symbol 107
Symbol的使用方法109
Symbol共享體系110
Symbol與類型強制轉換112
Symbol屬性檢索112
通過well-known Symbol暴露內部操作113
-- Symbol.hasInstance方法114
-- Symbol.isConcatSpreadable屬性116
-- Symbol.match、Symbol.replace、Symbol.search和Symbol.split屬性118
-- Symbol.toPrimitive方法120
-- Symbol.toStringTag屬性122
-- Symb ol.unscopables屬性125
小結127
第7章Set集合與Map集合128
ECMAScript 5中的Set集合與Map集合129
該解決方案的一些問題129
ECMAScript 6中的Set集合131
--創建Set集合併添加元素131 - -移除元素133
-- Set集合的forEach()方法133
--將Set集合轉換為數組136
-- Weak Set集合136
ECMAScript 6中的Map集合139
-- Map集合支持的方法140
-- Map集合的初始化方法141
-- Map集合的forEach()方法142
-- Weak Map集合143
小結147
第8章迭代器(Iterator)和生成器(Generator) 149
循環語句的問題149
什麼是迭代器150
什麼是生成器151
--生成器函數表達式153
--生成器對象的方法154
可迭代對象和for-of循環155
--訪問默認迭代器156
--創建可迭代對象157
內建迭代器158
--集合對象迭代器158
--字符串迭代器163
-- NodeList迭代器164
展開運算符與非數組可迭代對象165
高級迭代器功能166
--給迭代器傳遞參數166
--在迭代器中拋出錯誤168
--生成器返 語句170
--委託生成器171
異步任務執行174
--簡單任務執行器174
--向任務執行器傳遞數據176
--異步任務執行器177
小結180
第9章JavaScript中的類181
ECMAScript 5中的近類結構181
類的聲明182
--基本的類聲明語法182
--為何使用類語法184
類表達式186
--基本的類表達式語法186
--命名類表達式187
作為一等公民的類189
訪問器屬性190
可計算成員名稱192
生成器方法193
靜態成員195
繼承與派生類196
--類方法遮蔽199
--靜態成員繼承199
--派生自表達式的類200
--內建對象的繼承203 - Symbol.species屬性205
在類的構造函數中使用new.target 208
小結210
第10章改進的數組功能211
創建數組211
-- Array.of()方法212
-- Array.from()方法213
為所有數組添加的新方法216
-- find()方法和findIndex()方法217
-- fill()方法217
-- copyWithin()方法218
定型數組219
--數值數據類型220
--數組緩衝區221
--通過視圖操作數組緩衝區221
定型數 組與普通數組的相似之處228
--通用方法229
--相同的迭代器230
-- of()方法和from()方法230
定型數組與普通數組的差別231
--行為差異231
--缺失的方法232
--附加方法233
小結234
第11章Promise與異步編程235
異步編程的背景知識235
--事件模型236
--回調模式236
Promise的基礎知識239
-- Promise的生命週期239
--創建未完成的Promise 242
--創建已處理的Promise 244
--執行器錯誤247
全局的Promise拒絕處理248
Node.js環境的拒絕處理248
瀏覽器環境的拒絕處理251
串聯Promise 253
--捕獲錯誤254
-- Promise鏈的返回值255
--在Promise鏈中返回Promise 256
響應多個Promise 259
-- Promise.all()方法259
-- Promise.race()方法260
自Promise繼承262
基於Promise的異步任務執行263
小結267
第12章代理(Proxy)和反射(Reflection)API 269
數組問題269
代理和反射270
創建一個簡單的代理271
使用set陷阱驗證屬性272
用get陷阱驗證對象結構(Object Shape 274
使用has陷阱隱藏已有屬性275
用deleteProperty陷阱防止刪除屬性277
原型代理陷阱279
--原型代理陷阱的運行機制279
--為什麼有兩組方法281
對象可擴展性陷阱282
--兩個基礎示例283
--重複的可擴展性方法284
屬性描述符陷阱285
--給Object.defineProperty()添加限制286
--描述符對象限制287
--重複的描述符方法288
ownKeys陷阱290
函數代理中的apply和construct陷阱291
--驗證函數參數292
--不用new調用構造函數294
--覆寫抽象基類構造函數296
--可調用的類構造函數297
可撤銷代理298
解決數組問題299
--檢測數組索引300
- Symbol.species屬性205
- -添加新元素時增加length的值300
--減少length的值來刪除元素302
--實現MyArray類304
將代理用作原型307
--在原型上使用get陷阱
作者介紹
Nicholas C. Zakas自2000年以來一直致力於Web應用程序的開發,重點關注前端開發,並以寫作和講述前沿最佳實踐而聞名。他曾於雅虎主頁任職5年有餘,他也是多本書的作者,其中包括The Principles of Object-Oriented JavaScript(No Starch Press出版社)和Professional JavaScript for Web Developers(Wrox出版社)。
關於技術評審
Juriy Zaytsev(在網上以kangax著稱)是紐約的一位前端網站開發人員。自2007年以來,他一直在探索JavaScript的怪異特性並撰寫相關文章。Juriy為多個開源項目做出過貢獻,其中包括Prototype.js和其他的熱門項目,如他自己的Fabric.js。他是按需定制打印服務printio.ru的共同創始人,目前任職於Facebook。