深入理解 ES6 Understanding ECMAScript 6: The Definitive Guide for JavaScript Developers

Nicholas C. Zakas

買這商品的人也買了...

商品描述

ES6是迄今為止JavaScript內核首當其沖的一次重大更新。

本書是領域大家Nicholas C. Zakas撰寫的一份ES6的完整指南,書中詳細講解了ES 6在JavaScript對象類型、語法及其他方面激動人心的改變。

每一章都含有可運行於任何JavaScript環境的示例代碼,你可以利用這些代碼測試、理解ES6中的新功能。

無論你是Web開發者還是Node.js開發者,都可以通過本書來更好地理解和運用ES6,或是順利地從ES5遷移到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 

-- 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 

- -添加新元素時增加length的值300 

--減少length的值來刪除元素302 

--實現MyArray類304 

將代理用作原型307 

--在原型上使用get陷阱