發表於2024-11-23
√ 不識老尼,枉為前端攻城獅,其成名作《JS高級程序設計》曾名動江湖。
√ Redux締造者與React核心成員作序力薦,盛贊本書對JS的剖析無人企及。
√ 用直截瞭當的方式傳達艱深的技術細節,對技術的理解方可高效送達。
√ 中高級開發者藉由本書可一舉邁入對標準及其未來特性熟稔於心之化境。
ES6是ECMAScript標準十餘年來變動大的一個版本,其中添加瞭許多新的語法特性,既有大傢耳熟能詳的Promise,也有聞所未聞的Proxy代理和Reflection反射;既有可以通過轉譯器(Transpiler)等方式在舊版本瀏覽器中實現兼容的let、const、不定參數、展開運算符等功能,亦有無論如何都無法實現嚮前兼容的尾調用優化。深入理解ES6的特性對於所有JavaScript開發者而言至關重要,在可預見的未來,ES6中引入的語言特性會成為JavaScript應用程序的主流特性,這也是《深入理解ES6》的初衷。希望你通過閱讀《深入理解ES6》可以瞭解ES6的新特性,並在需要時能夠隨時使用。
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。
第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
-- Symbol.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
-- 添加新元素時增加length的值 300
-- 減少length的值來刪除元素 302
-- 實現MyArray類 304
將代理用作原型 307
-- 在原型上使用get陷阱 307
-- 在原型上使用set陷阱 308
-- 在原型上使用has陷阱 309
-- 將代理用作類的原型 310
小結 314
第13章 用模塊封裝代碼 315
什麼是模塊 315
導齣的基本語法 316
導入的基本語法 317
-- 導入單個綁定 318
-- 導入多個綁定 318
-- 導入整個模塊 318
-- 導入綁定的一個微妙怪異之處 320
導齣和導入時重命名 320
模塊的默認值 321
-- 導齣默認值 321
-- 導入默認值 322
重新導齣一個綁定 323
無綁定導入 324
加載模塊 325
-- 在Web瀏覽器中使用模塊 325
-- 瀏覽器模塊說明符解析 329
小結 330
附錄A ECMAScript 6中較小的改動 331
附錄B 瞭解ECMAScript 7(2016) 337
索引 343
譯者序
十年前誰也無法料到,彼時隻能寫小動畫的玩具語言JavaScript竟會有如今之威力,這愈發顯現齣Atwood定律“凡是能用JavaScript寫齣來的應用,最終都會用JavaScript來寫”的正確性。追本溯源,這與ECMAScript的發展功不可沒。
然而,ECMAScript的發展並非一帆風順。
1999年末,ECMA-262第3版[1]正式定稿,在之後的五六年中,幾乎看不到標準的任何新進展。直到2005年左右,隨著Google在多個重交互的應用中普及Ajax,開發者們逐漸接受這項新技術並逐步恢復對JavaScript的關注。於是,JavaScript創始人BrendanEich緊鑼密鼓地籌劃ECMAScript4標準,直到2007年,耗時兩年的ECMAScript4標準擴充工作在JeffDyer看來已經達到ECMAScript3的兩倍[2],Brendan遂撰文[3]進一步澄清與解釋。
DouglasCrockford認為這是一種過度復雜的稅負[4],並聯閤微軟起草ECMAScript3.1提案,同時,微軟也在TC-39會議中正式反對ES4中的部分標準。衝突過後,占據輿論優勢的ECMAScript3.1於2009年作為ES5正式發布[5]。
ECMAScript4並未就此消亡。委員會全體成員將ECMAScript3.1與ECMAScript4中的精華保留,作為ECMAScriptHarmony(取和諧之意),它轉而成為委員會的下一個目標ECMAScript6,並於2015年6月正式定稿,最終被命名為ECMAScript2015。委員會一改往日冗長的議程,約定每年必齣一版,通常以當年年份命名。截至此書翻譯完畢,ECMAScript2016也於2016年6月正式定稿[6],最新標準尚在進程中[7]。
《UnderstandingECMAScript6》一書是作者NicholasC.Zakas在GitHub開源社區[8]撰寫而成。作為標準的轉述者,存在部分理解誤區閤情閤理,本譯作基於NoStarchPress齣版社於2016年8月齣版的首印版,適當參考GitHub中的討論集結而成。
在本書翻譯結束之際,感慨萬韆。首先感謝裕波,是他的引薦讓我有機會翻譯本書。特彆感謝李鬆峰老師、Hax老師與剋軍老師的不吝賜教,幫助我審校翻譯內容。還要感謝博文視點的俠少(張春雨編輯),他高標準、嚴要求的專業態度時刻鞭策我前行。
感謝就職於騰訊的時光,帶我入行的導師張坤、為我解答所有疑惑的Leader陳恕勝、共同學習成長的兄弟陳煒鑫及其他夥伴,你們一絲不苟的態度不斷磨練我的心性。
最後,特彆要感謝我的母親楊虹女士,每當我不堪於兼顧工作與翻譯的時候,總是您的鼓勵點亮我前進的道路。
在本書的翻譯過程中我力求還原作者本意,但限於時間與水平,翻譯不當之處在所難免,還敬請各位讀者不吝賜教,我也會及時與齣版社同步以備再版時進行修正,或以勘誤的形式公布。如您有任何想法與建議,歡迎寫信至我的郵箱:lenville@gmail.com。
[1]https://www.ecma-international.org/publications/files/ECMA-ST-ARCH/ECMA-262,3rdedition,December1999.pdf
[2]https://mail.mozilla.org/pipermail/es-discuss/2007-October/001442.html
深入理解ES6 下載 mobi pdf epub txt 電子書 格式 2024
深入理解ES6 下載 mobi epub pdf 電子書很多js語法糖,有幫助
評分這本書很好,可以購買。
評分這本書很好很好,不過紙質還好吧
評分紙質好 慢慢看 物流挺快的
評分書不錯!書不錯!書不錯!書不錯!
評分男票買的 好像還沒開始看呢
評分內容挺完善的,很適閤我
評分不錯的東西
評分好好學學es6,不錯的學習書,包裝完好。
深入理解ES6 mobi epub pdf txt 電子書 格式下載 2024