TOP
紅利積點抵現金,消費購書更貼心
深入理解現代JavaScript:JavaScript新特性與編程最佳實踐(簡體書)
滿額折

深入理解現代JavaScript:JavaScript新特性與編程最佳實踐(簡體書)

商品資訊

人民幣定價:128 元
定價
:NT$ 768 元
優惠價
87668
海外經銷商無庫存,到貨日平均30天至45天
下單可得紅利積點 :20 點
商品簡介
作者簡介
名人/編輯推薦
目次

商品簡介

涵蓋ES2015~ES2020中JavaScript的所有新特性以及下一版的預覽。


探索新的語法:空值合並、可選鏈、let和const、類語法、私有方法、私有字段、new.target、數字分隔符、BigInt、解構、默認參數、箭頭函數、異步函數、await、生成器函數、…(rest和spread操作符)、模板字面量、二進制和八進制字面量、**(求冪運算符)、計算屬性/方法名、for-of、for-await-of、屬性的簡寫語法等。


詳細介紹新特性和模式:模塊、Promise、迭代、生成器、Symbol、代理、反射、類型化數組、Atomics、共享內存、WeakMap、WeakSet等。


揭示常見的陷阱並闡述如何避免它們。


展示如何跟進和參與JavaScript的改進流程。


介紹如何在新特性獲得廣泛支持之前使用它們。


作者簡介

T. J. Crowder是一位擁有30年經驗的軟件工程師。在他的整個職業生涯中,他至少有一半時間是在使用JavaScript從事開發工作。他經營著軟件承包和產品公司Farsight Software。他經常在Stack Overflow上為人們提供幫助,他是十大貢獻者之一和JavaScript標簽的頂級貢獻者。當他不工作或寫作時,他總是與他美麗的、支持他的妻子和出色的兒子共度美好時光。

名人/編輯推薦

JavaScript是一門快速發展的語言,對於有經驗的開發人員來說,如要掌握所有新添加的特性,可能會面臨挑戰。本書不僅會帶你探索世界上語言的新特性,而且會向你展示如何跟蹤這門語言的後續發展。本書首先介紹將新特性添加到 JavaScript 的流程,包括這個流程是如何管理的,以及由誰來管理;隨後深入詳細地描述每個新特性或者有調整的舊特性,並闡述示例用法、可能的陷阱;本書還將提供專業意見,教你使用新特性代替舊用法。

如果你是JavaScript(或TypeScript)開發人員,並且想了解在過去幾年中被添加到JavaScript的最新特性,以及如何在語言不斷發展的過程中掌握新動態,那麼《深入理解現代JavaScript》適用於你。只要你努力尋找,並對你信任的網站持謹慎態度,就幾乎可以在網上找到《深入理解現代JavaScript》中的所有內容;《深入理解現代JavaScript》提供了所有的技術細節,同時告訴你如何跟蹤不斷發生的變化。

《深入理解現代JavaScript》內容

下面是每一章的內容概覽。

第1章,ES2015~ES2020及後續版本的新特性——首先介紹JavaScript世界中的各種角色和一些重要的術語;然後描述“新特性”在《深入理解現代JavaScript》中的定義,以及將新特性添加到JavaScript的流程,包括這個流程是如何管理的,由誰管理,以及如何跟蹤和參與這一流程;最後介紹一些在舊環境中使用新特性所需的工具(或在當前環境中使用最新特性所需的工具)。

第2章,塊級作用域聲明:let和const——涵蓋新的聲明關鍵字let和const以及它們支持的新作用域,深入介紹循環中的作用域,重點說明for循環中作用域的處理。

第3章,函數的新特性——涵蓋與函數有關的各種新特性:箭頭函數、默認參數值、“rest”參數、name屬性和其他的語法改進。

第4章,類——涵蓋新的class特性:基本概念、子類、super、創建內置物件(如Array和Error)的子類,以及new.target特性。私有字段和其他處於提案流程中的特性將在第18章介紹。

第5章,物件的新特性——涵蓋可計算屬性名、屬性的簡寫語法、獲取和設置物件的原型、新的Symbol類型以及它與物件的關係、方法語法、屬性順序、屬性的展開語法,以及大量新的物件方法。

第6章,可迭代物件、迭代器、for-of循環、可迭代物件的展開語法和生成器——涵蓋迭代(一種強大的用於集合和列表的新工具),以及生成器(一種強大的與函數交互的新方式)。

第7章,解構——涵蓋解構這一重要的新語法,以及如何使用它從物件、數組和其他可迭代物件中提取數據,該章包含默認值、嵌套提取等語法。

第8章,Promise——深入研究這個用於處理異步過程的重要新工具。

第9章,異步函數、迭代器和生成器——詳細介紹新的async/await語法(它允許你在異步代碼中使用熟悉的邏輯流結構),以及異步迭代器和生成器的工作方式,還有新的for-await-of循環。

第10章,模板字面量、標簽函數和新的字符串特性——描述模板字面量語法、標簽函數和許多新的字符串特性,如更好的Unicode支持、常見方法的更新以及很多新方法。

第11章,新數組特性、類型化數組——涵蓋很多新的數組方法、各種已有方法的更新、類型化數組(如Int32Array)以及與類型化數組數據交互的高級特性。

第12章,Map和Set——介紹所有新的有鍵集合Map和Set,以及這些集合的“弱”版本WeakMap和WeakSet。

第13章,模塊——深入了解這個令人興奮且強大的代碼組織方式。

第14章,反射和代理——涵蓋Reflect和Proxy物件的強大動態元編程特性以及它們之間的關係。

第15章,正則表達式更新——描述過去幾年正則表達式出現的所有更新,如新的標志、命名捕獲組、反向預查和新的Unicode特性。

第16章,共享內存——涵蓋JavaScript程序中有關跨線程共享內存的複雜而棘手的方面,其中包括SharedArrayBuffer和Atomics物件、基本概念和陷阱注釋。

第17章,其他特性——涵蓋很多不適合放到其他章節的新特性:BigInt、新的整數字面量語法(二進制、新的八進制)、省略catch 綁定的異常、新的 Math 方法、取冪運算符、Math物件的擴展、尾遞歸優化、空值合並、可選鏈,以及出於兼容性原因而定義的“規範附錄B”(僅瀏覽器)特性。

第18章,即將推出的類特性——描述在提案流程中處於階段3的類的增強特性:公有字段聲明、私有字段和私有方法。

第19章,展望未來——最後,描述目前正在進行的一些改進:頂層await、WeakRef和清理回調、正則表達式匹配索引、Atomics.asyncWait、一些新的語法特性、舊的正則表達式特性,以及各種即將推出的標準庫擴展。

附錄,出色的特性及對應的章(向J. K. Rowling致歉)——提供新特性的列表,並指出每個特性所屬的章節。這些列表包括:按字母順序排列的特性,新的基礎知識,新的語法、關鍵字、運算符、循環等,新的字面量形式,標準庫的擴展和更新,以及其他特性。

《深入理解現代JavaScript》讀者物件

《深入理解現代JavaScript》的讀者應該:

● 至少對JavaScript有基本的了解。

● 想了解過去幾年中增加的新特性。

這不是一本為專家編寫的學術書籍,而是一本面向JavaScript開發人員的實用性書籍。

幾乎所有拿起《深入理解現代JavaScript》的人都知道書中的一些內容,但幾乎沒有人拿起這本書時就已經知道了所有內容。也許你已經清楚let和const的基礎知識,但是還沒有完全掌握async函數。也許Promise對你來說已經是舊語法了,但你在一些現代代碼中看到了一些不認識的語法。你可以在《深入理解現代JavaScript》中找到ES2015~ES2020(及後續版本)的所有新特性。

如何使用《深入理解現代JavaScript》

建議先閱讀第1章。第1章定義了《深入理解現代JavaScript》其余部分使用的很多術語。如果跳過第1章,你很可能會在閱讀《深入理解現代JavaScript》時遇到困難。

之後,你可以選擇按順序閱讀各章,或者跳著閱讀。

我以這樣的順序安排各章內容是有原因的,而且每個章節都與前面章節息息相關。例如,第8章介紹的Promise,對於理解第9章中的async函數很重要。當然,建議你按照我安排的順序閱讀《深入理解現代JavaScript》。不過我敢肯定,你是一個有自己想法的聰明人,如果你不按照順序閱讀,也沒關係。

建議你閱讀(或者至少略讀)所有的章節(第16章可能除外,稍後再談這個問題)。即使你認為自己已了解某個特性,也可能不知道或者只是認為自己知道書中的一些內容。例如,也許你打算跳過第2章,因為你已經知道關於let和const的所有知識。你甚至知道為什麼下面的代碼創建了10個不同的變量i:

for (let i = 0; i < 10; ++i) { /*...*/

setTimeout(() => console.log(i));

}

還有,如果像這樣使用:

let a = "ay";

var b = "bee";

為什麼會在全局作用域創建window.b屬性,卻沒有創建window.a屬性?即使這些你都清楚,我也建議你略讀第2章,以確保你掌握所有內容。

第16章有點特殊:它是關於如何在線程之間共享內存的。大多數JavaScript開發人員都不需要在線程之間共享內存。但有些開發人員需要,這也是第16章存在的原因;而大多數人不需要,如果你屬於這一類,則可跳過該章;如果你認為自己在將來某個時候需要共享內存,可再回到第16章中學習它,這沒關係。

此外,運行《深入理解現代JavaScript》的示例,用它們進行試驗,祝你編程愉快。

《深入理解現代JavaScript》代碼下載

你可以通過網址下載各章的示例和代碼清單,也可通過掃描封底的二維碼下載。


目次

第1章 ES2015~ES2020及後續版本的

新特性 1

1.1 名稱、定義和術語 2

1.1.1 Ecma?ECMAScript?TC39? 2

1.1.2 ES6?ES7?ES2015?ES2020? 2

1.1.3 JavaScript“引擎”、瀏覽器及其他 3

1.2 什麼是“新特性” 3

1.3 新特性的推動流程 5

1.3.1 誰負責 5

1.3.2 流程 5

1.3.3 參與 6

1.3.4 跟上新特性的步伐 7

1.4 舊環境中使用新特性 8

1.5 本章小結 12

第2章 塊級作用域聲明:let和const 13

2.1 let和const的介紹 13

2.2 真正的塊級作用域 14

2.3 重復聲明將拋出錯誤 15

2.4 提升和暫時性死區 15

2.5 一種新的全局變量 17

2.6 const:JavaScript的常量 19

2.6.1 const基礎 19

2.6.2 常量引用的物件仍然是可變的 20

2.7 循環中的塊級作用域 21

2.7.1 “循環中的閉包”問題 21

2.7.2 綁定:變量、常量以及其他

標識符的工作方式 23

2.7.3 while和do-while循環 27

2.7.4 性能影響 28

2.7.5 循環塊中的const 29

2.7.6 for-in循環中的const 29

2.8 舊習換新 30

2.8.1 用const或let替代var 30

2.8.2 縮小變量的作用域 30

2.8.3 用塊級作用域替代匿名函數 30

第3章 函數的新特性 33

3.1 箭頭函數和this、super等詞法 34

3.1.1 箭頭函數語法 34

3.1.2 箭頭函數和this詞法 37

3.1.3 箭頭函數不能被用作構造函數 38

3.2 默認參數值 38

3.2.1 默認值是表達式 39

3.2.2 默認值在自己的作用域中被計算 40

3.2.3 默認值不會增加函數的arity 42

3.3 “rest”參數 42

3.4 參數列表和函數調用中的

尾後逗號 44

3.5 函數的name屬性 45

3.6 在語句塊中聲明函數 46

3.6.1 在語句塊中聲明函數:標準語義 48

3.6.2 在語句塊中聲明函數:

傳統Web語義 49

3.7 舊習換新 51

3.7.1 使用箭頭函數替代各種訪問this

值的變通方式 51

3.7.2 在不使用this或arguments時,

回調函數使用箭頭函數 52

3.7.3 考慮在更多地方使用箭頭函數 52

3.7.4 當調用者需要控制this的值時,

不要使用箭頭函數 53

3.7.5 使用參數默認值,而不是

代碼實現 53

3.7.6 使用“rest”參數替代arguments

關鍵字 53

3.7.7 如有必要,考慮使用尾後逗號 53

第4章 類 55

4.1 類的概念 55

4.2 介紹新的類語法 56

4.2.1 添加構造函數 57

4.2.2 添加實例屬性 59

4.2.3 添加原型方法 59

4.2.4 添加靜態方法 61

4.3 添加訪問器屬性 61

4.4 對比新語法和舊語法 64

4.5 創建子類 66

4.6 關鍵字super 69

4.6.1 編寫子類構造函數 69

4.6.2 繼承和訪問超類原型的屬性和

方法 70

4.6.3 繼承靜態方法 73

4.6.4 靜態方法中的super 75

4.6.5 返回新實例的方法 75

4.6.6 內置物件的子類 79

4.6.7 super的使用 81

4.7 移除Object.prototype 83

4.8 new.target 84

4.9 類聲明與類表達式 87

4.9.1 類聲明 87

4.9.2 類表達式 88

4.10 更多內容 89

4.11 舊習換新 89

第5章 物件的新特性 91

5.1 可計算屬性名 91

5.2 屬性的簡寫語法 92

5.3 獲取和設置物件原型 93

5.3.1 Object.setPrototypeOf 93

5.3.2 瀏覽器環境中的__proto__屬性 94

5.3.3 瀏覽器環境中的__proto__字面量

屬性名 94

5.4 物件方法的簡寫語法,以及類

之外的super 95

5.5 Symbol 97

5.5.1 定義Symbol的原因 97

5.5.2 創建和使用Symbol 99

5.5.3 Symbol並不用於私有屬性 99

5.5.4 全局Symbol 100

5.5.5 內置的Symbol值 103

5.6 物件的新增方法 104

5.6.1 Object.assign 104

5.6.2 Object.is 105

5.6.3 Object.values 105

5.6.4 Object.entries 106

5.6.5 Object.fromEntries 106

5.6.6 Object.getOwnPropertySymbols 106

5.6.7 Object.getOwnPropertyDescriptors 106

5.7 Symbol.toPrimitive 107

5.8 屬性順序 109

5.9 屬性擴展語法 110

5.10 舊習換新 111

5.10.1 創建物件時對動態變量使用可

計算屬性名 111

5.10.2 從同名變量初始化物件時,

使用簡寫語法 111

5.10.3 使用Object.assign替代自定義的

擴展方法或者顯式復制所有

屬性 112

5.10.4 基於已有物件創建新物件時,

使用屬性擴展語法 112

5.10.5 使用Symbol避免屬性名衝突 112

5.10.6 使用Object.getPrototypeOf/

setPrototypeOf替代__proto__ 112

5.10.7 使用物件方法的簡寫語法來

定義物件中的方法 112

第6章 可迭代物件、迭代器、for-of循環、

可迭代物件的展開語法和

生成器 115



第18章 即將推出的類特性 435

18.1 公有和私有的類字段、方法和

訪問器 435

18.1.1 公有字段(屬性)定義 436

18.1.2 私有字段 440

18.1.3 私有實例方法和訪問器 446

18.1.4 公有靜態字段、私有靜態字段和

私有靜態方法 450

18.2 舊習換新 452

18.2.1 使用屬性定義,而不是在構造

函數中創建屬性(在適當的

情況下) 452

18.2.2 使用私有類字段,而不是前綴

(在適當的情況下) 453

18.2.3 使用私有方法(而不是類外的

函數)進行私有操作 453

第19章 展望未來 457

19.1 頂層await 458

19.1.1 概述和用例 458

19.1.2 示例 459

19.1.3 錯誤處理 463

19.2 WeakRef和清理回調 464

19.2.1 WeakRef 464

19.2.2 清理回調 466

19.3 正則表達式匹配索引 471

19.4 String.prototype.replaceAll 472

19.5 Atomics的asyncWait方法 472

19.6 其他語法微調 473

19.6.1 數字分隔符 473

19.6.2 支持hashbang 474

19.7 廢棄舊的正則表達式特性 474

19.8 感謝閱讀 475

附錄 出色的特性及對應的章

(向J.K. Rowling致歉) 477


購物須知

大陸出版品因裝訂品質及貨運條件與台灣出版品落差甚大,除封面破損、內頁脫落等較嚴重的狀態,其餘商品將正常出貨。

特別提醒:部分書籍附贈之內容(如音頻mp3或影片dvd等)已無實體光碟提供,需以QR CODE 連結至當地網站註冊“並通過驗證程序”,方可下載使用。

無現貨庫存之簡體書,將向海外調貨:
海外有庫存之書籍,等候約45個工作天;
海外無庫存之書籍,平均作業時間約60個工作天,然不保證確定可調到貨,尚請見諒。

為了保護您的權益,「三民網路書店」提供會員七日商品鑑賞期(收到商品為起始日)。

若要辦理退貨,請在商品鑑賞期內寄回,且商品必須是全新狀態與完整包裝(商品、附件、發票、隨貨贈品等)否則恕不接受退貨。

優惠價:87 668
海外經銷商無庫存,到貨日平均30天至45天

暢銷榜

客服中心

收藏

會員專區