一、引言
JavaScript 是一種廣泛使用的網(wǎng)絡(luò)編程語言,它在前端開發(fā)中扮演著重要角色。隨著時(shí)間的推移,JavaScript 的版本不斷更新,新的功能和語法不斷涌現(xiàn),使得這門語言更加豐富和強(qiáng)大。ES6~ESn 是指 JavaScript 的版本6到版本n(例如ES7、ES8等),這些新版本為我們帶來了許多新的特性和功能。本文將介紹如何學(xué)好 JavaScript 的 ES6~ESn,更好地掌握這門語言的最新版本。
二、了解 ES6~ESn 的新特性
學(xué)習(xí) JavaScript 的 ES6~ESn,首先需要了解它們的新特性。以下是 ES6~ESn 的一些重要新特性:
- let 和 const 關(guān)鍵字:ES6 引入了塊級(jí)作用域的變量聲明,let 和 const 可以用來聲明變量或常量。let 可以重新賦值,而 const 用于聲明常量,不可以重新賦值。
- 箭頭函數(shù):ES6 引入了箭頭函數(shù),它是一個(gè)更加簡(jiǎn)潔的函數(shù)語法。箭頭函數(shù)沒有自己的 this 值,它會(huì)繼承外層作用域的 this 值。
- 模塊化:ES6 引入了模塊化語法,通過 import 和 export 關(guān)鍵字可以實(shí)現(xiàn)模塊的導(dǎo)入和導(dǎo)出。
- Promise:ES6 引入了 Promise,它是一個(gè)異步編程的方式,可以方便地處理異步操作。
- Generator:ES6 引入了 Generator,它可以將函數(shù)內(nèi)部的執(zhí)行狀態(tài)保存下來,以便在后續(xù)的調(diào)用中恢復(fù)執(zhí)行狀態(tài)。
- Class:ES6 引入了 Class,它是一種更加直觀的面向?qū)ο缶幊痰姆绞健?/li>
- Proxy 和 Reflect:ES6 引入了 Proxy 和 Reflect,它們可以用來操作對(duì)象和函數(shù)的行為。
- 新數(shù)據(jù)結(jié)構(gòu):ES6 引入了新的數(shù)據(jù)結(jié)構(gòu),如 Map、Set、WeakMap、WeakSet 等。
- Spread Operator:ES7 引入了 Spread Operator(…),它可以將數(shù)組或?qū)ο笳归_到函數(shù)的參數(shù)列表中。
- Async/Await:ES8 引入了 Async/Await,它可以使異步代碼看起來像同步代碼,提高了代碼的可讀性和可維護(hù)性。
了解 ES6~ESn 的新特性是學(xué)習(xí)它們的第一步,這有助于理解這些版本與之前版本的差異以及它們能夠?yàn)槲覀儙硎裁?。接下來,我們需要掌握這些新特性的用法和實(shí)現(xiàn)原理。
三、掌握 ES6~ESn 的用法和實(shí)現(xiàn)原理
學(xué)習(xí) JavaScript 的 ES6~ESn,需要掌握它們的用法和實(shí)現(xiàn)原理。以下是掌握 ES6~ESn 用法和實(shí)現(xiàn)原理的一些建議:
- 閱讀官方文檔:官方文檔是學(xué)習(xí) JavaScript 的最佳資源之一。通過閱讀官方文檔,可以了解 ES6~ESn 的語法、用法和實(shí)現(xiàn)原理。
- 編寫代碼實(shí)踐:學(xué)習(xí) ES6~ESn 的最好方法是多寫代碼實(shí)踐。嘗試使用新的語法和特性編寫代碼,并理解它們的優(yōu)點(diǎn)和適用場(chǎng)景。
- 學(xué)習(xí) Babel:Babel 是一個(gè) JavaScript 編譯器,它可以將 ES6~ESn 的代碼轉(zhuǎn)換為 ES5 的代碼,以便在老版本的瀏覽器上運(yùn)行。學(xué)習(xí) Babel 可以更好地理解 ES6~ESn 的實(shí)現(xiàn)原理。
- 學(xué)習(xí)編譯器原理:了解 JavaScript 編譯器的原理可以更好地理解 ES6~ESn 的語法和實(shí)現(xiàn)原理。可以閱讀一些關(guān)于編譯器原理的書籍或在線教程。
- 學(xué)習(xí) WebAssembly:WebAssembly 是一種新的代碼格式,它可以提高網(wǎng)頁的性能和可擴(kuò)展性。學(xué)習(xí) WebAssembly 可以更好地理解 JavaScript 的發(fā)展方向和未來趨勢(shì)。
四、深入挖掘和拓展
通過了解 ES6~ESn 的新特性、掌握它們的用法和實(shí)現(xiàn)原理,可以更好地使用 JavaScript 以下是一些深入挖掘和拓展的經(jīng)驗(yàn)幫助更好地掌握新特性:
- 持續(xù)學(xué)習(xí)和實(shí)踐:JavaScript 的發(fā)展是不斷進(jìn)步的,新的版本和特性不斷涌現(xiàn)。保持學(xué)習(xí)和實(shí)踐是掌握最新版本的關(guān)鍵。嘗試使用新的語法和特性編寫代碼,并理解它們的優(yōu)點(diǎn)和適用場(chǎng)景。
- 參與開源項(xiàng)目:通過參與開源項(xiàng)目,可以了解其他開發(fā)者是如何使用 ES6~ESn 的特性的,同時(shí)也可以通過貢獻(xiàn)代碼來加深對(duì) ES6~ESn 的理解。
- 閱讀源代碼:閱讀 JavaScript 庫或框架的源代碼可以更好地理解這些工具是如何使用 ES6~ESn 的特性來實(shí)現(xiàn)功能的,同時(shí)也可以學(xué)習(xí)到一些最佳實(shí)踐。
- 學(xué)習(xí)其他編程語言:學(xué)習(xí)其他編程語言可以更好地理解 JavaScript 的語法和特性,同時(shí)也可以了解其他編程語言中的優(yōu)秀特性和實(shí)踐。
- 參與社區(qū)討論:參與社區(qū)討論可以了解其他開發(fā)者對(duì) ES6~ESn 的看法和經(jīng)驗(yàn),同時(shí)也可以解決遇到的問題。。
《深入理解現(xiàn)代JavaScript》
編輯推薦
JavaScript是一門快速發(fā)展的語言,對(duì)于有經(jīng)驗(yàn)的開發(fā)人員來說,如要掌握所有新添加的特性,可能會(huì)面臨挑戰(zhàn)。本書不僅會(huì)帶你探索世界上語言的新特性,而且會(huì)向你展示如何跟蹤這門語言的后續(xù)發(fā)展。本書首先介紹將新特性添加到 JavaScript 的流程,包括這個(gè)流程是如何管理的,以及由誰來管理;隨后深入詳細(xì)地描述每個(gè)新特性或者有調(diào)整的舊特性,并闡述示例用法、可能的陷阱;本書還將提供專業(yè)意見,教你使用新特性代替舊用法。
內(nèi)容簡(jiǎn)介
主要內(nèi)容涵蓋ES2015~ES2020中JavaScript的所有新特性以及下一版的預(yù)覽。
探索新的語法:空值合并、可選鏈、let和const、類語法、私有方法、私有字段、new.target、數(shù)字分隔符、BigInt、解構(gòu)、默認(rèn)參數(shù)、箭頭函數(shù)、異步函數(shù)、await、生成器函數(shù)、…(rest和spread操作符)、模板字面量、二進(jìn)制和八進(jìn)制字面量、**(求冪運(yùn)算符)、計(jì)算屬性/方法名、for-of、for-await-of、屬性的簡(jiǎn)寫語法等。
詳細(xì)介紹新特性和模式:模塊、Promise、迭代、生成器、Symbol、代理、反射、類型化數(shù)組、Atomics、共享內(nèi)存、WeakMap、WeakSet等。
揭示常見的陷阱并闡述如何避免它們。
展示如何跟進(jìn)和參與JavaScript的改進(jìn)流程。
介紹如何在新特性獲得廣泛支持之前使用它們。
作者簡(jiǎn)介
T. J. Crowder是一位擁有30年經(jīng)驗(yàn)的軟件工程師。在他的整個(gè)職業(yè)生涯中,他至少有一半時(shí)間是在使用JavaScript從事開發(fā)工作。他經(jīng)營(yíng)著軟件承包和產(chǎn)品公司Farsight Software。他經(jīng)常在Stack Overflow上為人們提供幫助,他是十大貢獻(xiàn)者之一和JavaScript標(biāo)簽的頂級(jí)貢獻(xiàn)者。當(dāng)他不工作或?qū)懽鲿r(shí),他總是與他美麗的、支持他的妻子和出色的兒子共度美好時(shí)光。
精彩書評(píng)
縱觀ECMAScript的歷史,ES6版本的推出無疑是前端歷史的轉(zhuǎn)折點(diǎn)。ES6引入類的概念、塊級(jí)作用域、解構(gòu)等特性,讓JavaScript語言蛻變成為企業(yè)級(jí)的開發(fā)語言。現(xiàn)代瀏覽器對(duì)ES6的支持已經(jīng)接近98%,因此ES6的新語法可以直接在瀏覽器中運(yùn)行,前端同學(xué)大可將ES5的兼容支持從編譯器中移走。ES2015后續(xù)版本的新特性,JavaScript也在逐漸實(shí)現(xiàn)。而對(duì)于JavaScript早期版本的學(xué)習(xí)者和使用者,有大量知識(shí)點(diǎn)需要汰換更新。這本書正好切中了這點(diǎn),除了詳細(xì)介紹ES2015~ES2020的新特性,以及新特性提案產(chǎn)生的原因,還對(duì)比了新舊做法。非常及時(shí)的一本書,推薦閱讀。
——蒲松洋(花名秦粵) 阿里前端標(biāo)準(zhǔn)化負(fù)責(zé)人,TC39成員,《Serverless入門課》作者
從ES6開始,JavaScript的語言特性面臨爆發(fā)式增長(zhǎng),其新特性的數(shù)量足以新造一門語言。對(duì)我們這一代老程序員來說,比起自己研究規(guī)范,當(dāng)然還是希望有本不但系統(tǒng)介紹新特性,還帶最佳實(shí)踐的書了,不過考慮到語言的發(fā)展速度,希望每年都出這么一本書。
——程劭非(winter) 開課吧Web教學(xué)首席顧問,前阿里巴巴高級(jí)技術(shù)專家
對(duì)于ES新特性,上會(huì)有風(fēng)險(xiǎn),不上也會(huì)有后顧之憂。如今,很多ES新特性都已成為事實(shí)上的標(biāo)準(zhǔn),因此,不管大家是否愿意學(xué)習(xí)和使用,我們都需要直面這個(gè)問題。這本書基本覆蓋了ES2015~ES2020之間的核心特性,是JavaScript相關(guān)開發(fā)者必備的書籍。作者是值得信賴的T.J.Crowder,他積極參與了TC39的很多提案。從內(nèi)容上看,這本書也是非常專業(yè)的,它淺顯易懂,在必要的點(diǎn)上又能深入淺出,是不可多得的一本好書,推薦。
——桑世龍(花名狼叔) Node.js布道者,《狼書》作者
這是一本全面又深入地介紹 ES2015~ES2020的專業(yè)書籍,講解了新時(shí)代的前端應(yīng)該怎樣編寫優(yōu)雅又高效的JavaScript 代碼。不少初學(xué)者面對(duì)這些新特性時(shí)不知道如何下手,這本書提供了豐富的例子和文檔集合,幫助你提升自己的編碼技巧,非常推薦!
——付強(qiáng)(小爝) 新浪移動(dòng)前端負(fù)責(zé)人
ECMAScript 自從 ES6 之后,以年為單位的版本發(fā)布讓新特性的落地明顯加快了步伐。這本書從頂向下分解 ECMAScript,從新特性背景出發(fā),詳解特性設(shè)計(jì),以及在各種具體場(chǎng)景中如何使用新特性獲得更易讀、更健壯的代碼,幫助讀者快速起手這些新工具。這本書絕對(duì)不容錯(cuò)過。
——吳成忠(花名昭朗) Node.js Core Collaborator,TC39代表
在大數(shù)據(jù)與可視化領(lǐng)域,Python與JavaScript并稱前后端構(gòu)建的兩大利器。Python由于網(wǎng)上資料與API的豐富性、規(guī)范性,自學(xué)至熟練難度尚可。JavaScript自上世紀(jì)末誕生以來,歷經(jīng)多版規(guī)范,近年來又隨著Web熱潮急速進(jìn)化,新的框架與標(biāo)準(zhǔn)層出不窮,初學(xué)者往往止步不前。這本書的原作者為國(guó)際頂級(jí)軟件系統(tǒng)開發(fā)者,其譯者亦在互聯(lián)網(wǎng)業(yè)界沉淀多年,前端功力深厚、經(jīng)驗(yàn)豐富。這本書詳述了近5年JavaScript語言的新發(fā)展、新應(yīng)用,實(shí)為前端愛好者、工程師、大數(shù)據(jù)交互系統(tǒng)研究者的福音,故隆重推薦。
——時(shí)磊 北京航空航天大學(xué)計(jì)算機(jī)學(xué)院教授,中國(guó)可視化與可視分析大會(huì)論文主席
前端開發(fā)是需要終生學(xué)習(xí)的,需要程序員真正做到活到老學(xué)到老。JavaScript更是一種極具活力的語言,也是一種常用常新的語言。講解JavaScript基礎(chǔ)的書雖然很多,但是,能夠與時(shí)俱進(jìn)地介紹JavaScript新特性的書籍卻不多。這本書幾乎涵蓋了ES2015~ES2020的所有新特性,以及一些目前處在階段3的新特性,給出了豐富的實(shí)例來幫助讀者理解。這本書淺顯易懂,并經(jīng)常將新特性與之前的語法特性進(jìn)行對(duì)比。即使是對(duì)JavaScript不了解的同學(xué),也可通過本書迅速上手,并對(duì)前端開發(fā)產(chǎn)生興趣和成就感。這是你成為JavaScript高手的必備書籍之一。
——馬劍竹 北京大學(xué)人工智能研究院副教授
目錄
第1章 ES2015~ES2020及后續(xù)版本的
新特性 1
1.1 名稱、定義和術(shù)語 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 新特性的推動(dòng)流程 5
1.3.1 誰負(fù)責(zé) 5
1.3.2 流程 5
1.3.3 參與 6
1.3.4 跟上新特性的步伐 7
1.4 舊環(huán)境中使用新特性 8
1.5 本章小結(jié) 12
第2章 塊級(jí)作用域聲明:let和const 13
2.1 let和const的介紹 13
2.2 真正的塊級(jí)作用域 14
2.3 重復(fù)聲明將拋出錯(cuò)誤 15
2.4 提升和暫時(shí)性死區(qū) 15
2.5 一種新的全局變量 17
2.6 const:JavaScript的常量 19
2.6.1 const基礎(chǔ) 19
2.6.2 常量引用的對(duì)象仍然是可變的 20
2.7 循環(huán)中的塊級(jí)作用域 21
2.7.1 “循環(huán)中的閉包”問題 21
2.7.2 綁定:變量、常量以及其他
標(biāo)識(shí)符的工作方式 23
2.7.3 while和do-while循環(huán) 27
2.7.4 性能影響 28
2.7.5 循環(huán)塊中的const 29
2.7.6 for-in循環(huán)中的const 29
2.8 舊習(xí)換新 30
2.8.1 用const或let替代var 30
2.8.2 縮小變量的作用域 30
2.8.3 用塊級(jí)作用域替代匿名函數(shù) 30
第3章 函數(shù)的新特性 33
3.1 箭頭函數(shù)和this、super等詞法 34
3.1.1 箭頭函數(shù)語法 34
3.1.2 箭頭函數(shù)和this詞法 37
3.1.3 箭頭函數(shù)不能被用作構(gòu)造函數(shù) 38
3.2 默認(rèn)參數(shù)值 38
3.2.1 默認(rèn)值是表達(dá)式 39
3.2.2 默認(rèn)值在自己的作用域中被計(jì)算 40
3.2.3 默認(rèn)值不會(huì)增加函數(shù)的arity 42
3.3 “rest”參數(shù) 42
3.4 參數(shù)列表和函數(shù)調(diào)用中的
尾后逗號(hào) 44
3.5 函數(shù)的name屬性 45
3.6 在語句塊中聲明函數(shù) 46
3.6.1 在語句塊中聲明函數(shù):標(biāo)準(zhǔn)語義 48
3.6.2 在語句塊中聲明函數(shù):
傳統(tǒng)Web語義 49
3.7 舊習(xí)換新 51
3.7.1 使用箭頭函數(shù)替代各種訪問this
值的變通方式 51
3.7.2 在不使用this或arguments時(shí),
回調(diào)函數(shù)使用箭頭函數(shù) 52
3.7.3 考慮在更多地方使用箭頭函數(shù) 52
3.7.4 當(dāng)調(diào)用者需要控制this的值時(shí),
不要使用箭頭函數(shù) 53
3.7.5 使用參數(shù)默認(rèn)值,而不是
代碼實(shí)現(xiàn) 53
3.7.6 使用“rest”參數(shù)替代arguments
關(guān)鍵字 53
3.7.7 如有必要,考慮使用尾后逗號(hào) 53
第4章 類 55
4.1 類的概念 55
4.2 介紹新的類語法 56
4.2.1 添加構(gòu)造函數(shù) 57
4.2.2 添加實(shí)例屬性 59
4.2.3 添加原型方法 59
4.2.4 添加靜態(tài)方法 61
4.3 添加訪問器屬性 61
4.4 對(duì)比新語法和舊語法 64
4.5 創(chuàng)建子類 66
4.6 關(guān)鍵字super 69
4.6.1 編寫子類構(gòu)造函數(shù) 69
4.6.2 繼承和訪問超類原型的屬性和
方法 70
4.6.3 繼承靜態(tài)方法 73
4.6.4 靜態(tài)方法中的super 75
4.6.5 返回新實(shí)例的方法 75
4.6.6 內(nèi)置對(duì)象的子類 79
4.6.7 super的使用 81
4.7 移除Object.prototype 83
4.8 new.target 84
4.9 類聲明與類表達(dá)式 87
4.9.1 類聲明 87
4.9.2 類表達(dá)式 88
4.10 更多內(nèi)容 89
4.11 舊習(xí)換新 89
第5章 對(duì)象的新特性 91
5.1 可計(jì)算屬性名 91
5.2 屬性的簡(jiǎn)寫語法 92
5.3 獲取和設(shè)置對(duì)象原型 93
5.3.1 Object.setPrototypeOf 93
5.3.2 瀏覽器環(huán)境中的__proto__屬性 94
5.3.3 瀏覽器環(huán)境中的__proto__字面量
屬性名 94
5.4 對(duì)象方法的簡(jiǎn)寫語法,以及類
之外的super 95
5.5 Symbol 97
5.5.1 定義Symbol的原因 97
5.5.2 創(chuàng)建和使用Symbol 99
5.5.3 Symbol并不用于私有屬性 99
5.5.4 全局Symbol 100
5.5.5 內(nèi)置的Symbol值 103
5.6 對(duì)象的新增方法 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 屬性擴(kuò)展語法 110
5.10 舊習(xí)換新 111
5.10.1 創(chuàng)建對(duì)象時(shí)對(duì)動(dòng)態(tài)變量使用可
計(jì)算屬性名 111
5.10.2 從同名變量初始化對(duì)象時(shí),
使用簡(jiǎn)寫語法 111
5.10.3 使用Object.assign替代自定義的
擴(kuò)展方法或者顯式復(fù)制所有
屬性 112
5.10.4 基于已有對(duì)象創(chuàng)建新對(duì)象時(shí),
使用屬性擴(kuò)展語法 112
5.10.5 使用Symbol避免屬性名沖突 112
5.10.6 使用Object.getPrototypeOf/
setPrototypeOf替代__proto__ 112
5.10.7 使用對(duì)象方法的簡(jiǎn)寫語法來
定義對(duì)象中的方法 112
第6章 可迭代對(duì)象、迭代器、for-of循環(huán)、
可迭代對(duì)象的展開語法和
生成器 115
第18章 即將推出的類特性 435
18.1 公有和私有的類字段、方法和
訪問器 435
18.1.1 公有字段(屬性)定義 436
18.1.2 私有字段 440
18.1.3 私有實(shí)例方法和訪問器 446
18.1.4 公有靜態(tài)字段、私有靜態(tài)字段和
私有靜態(tài)方法 450
18.2 舊習(xí)換新 452
18.2.1 使用屬性定義,而不是在構(gòu)造
函數(shù)中創(chuàng)建屬性(在適當(dāng)?shù)?
情況下) 452
18.2.2 使用私有類字段,而不是前綴
(在適當(dāng)?shù)那闆r下) 453
18.2.3 使用私有方法(而不是類外的
函數(shù))進(jìn)行私有操作 453
第19章 展望未來 457
19.1 頂層await 458
19.1.1 概述和用例 458
19.1.2 示例 459
19.1.3 錯(cuò)誤處理 463
19.2 WeakRef和清理回調(diào) 464
19.2.1 WeakRef 464
19.2.2 清理回調(diào) 466
19.3 正則表達(dá)式匹配索引 471
19.4 String.prototype.replaceAll 472
19.5 Atomics的asyncWait方法 472
19.6 其他語法微調(diào) 473
19.6.1 數(shù)字分隔符 473
19.6.2 支持hashbang 474
19.7 廢棄舊的正則表達(dá)式特性 474
19.8 感謝閱讀 475
附錄 出色的特性及對(duì)應(yīng)的章
(向J.K. Rowling致歉) 477
前言/序言
如果你是JavaScript(或TypeScript)開發(fā)人員,并且想了解在過去幾年中被添加到JavaScript的最新特性,以及如何在語言不斷發(fā)展的過程中掌握新動(dòng)態(tài),那么《深入理解現(xiàn)代JavaScript》適用于你。只要你努力尋找,并對(duì)你信任的網(wǎng)站持謹(jǐn)慎態(tài)度,就幾乎可以在網(wǎng)上找到《深入理解現(xiàn)代JavaScript》中的所有內(nèi)容;《深入理解現(xiàn)代JavaScript》提供了所有的技術(shù)細(xì)節(jié),同時(shí)告訴你如何跟蹤不斷發(fā)生的變化。
《深入理解現(xiàn)代JavaScript》內(nèi)容
下面是每一章的內(nèi)容概覽。
第1章,ES2015~ES2020及后續(xù)版本的新特性——首先介紹JavaScript世界中的各種角色和一些重要的術(shù)語;然后描述“新特性”在《深入理解現(xiàn)代JavaScript》中的定義,以及將新特性添加到JavaScript的流程,包括這個(gè)流程是如何管理的,由誰管理,以及如何跟蹤和參與這一流程;最后介紹一些在舊環(huán)境中使用新特性所需的工具(或在當(dāng)前環(huán)境中使用最新特性所需的工具)。
第2章,塊級(jí)作用域聲明:let和const——涵蓋新的聲明關(guān)鍵字let和const以及它們支持的新作用域,深入介紹循環(huán)中的作用域,重點(diǎn)說明for循環(huán)中作用域的處理。
第3章,函數(shù)的新特性——涵蓋與函數(shù)有關(guān)的各種新特性:箭頭函數(shù)、默認(rèn)參數(shù)值、“rest”參數(shù)、name屬性和其他的語法改進(jìn)。
第4章,類——涵蓋新的class特性:基本概念、子類、super、創(chuàng)建內(nèi)置對(duì)象(如Array和Error)的子類,以及new.target特性。私有字段和其他處于提案流程中的特性將在第18章介紹。
第5章,對(duì)象的新特性——涵蓋可計(jì)算屬性名、屬性的簡(jiǎn)寫語法、獲取和設(shè)置對(duì)象的原型、新的Symbol類型以及它與對(duì)象的關(guān)系、方法語法、屬性順序、屬性的展開語法,以及大量新的對(duì)象方法。
第6章,可迭代對(duì)象、迭代器、for-of循環(huán)、可迭代對(duì)象的展開語法和生成器——涵蓋迭代(一種強(qiáng)大的用于集合和列表的新工具),以及生成器(一種強(qiáng)大的與函數(shù)交互的新方式)。
第7章,解構(gòu)——涵蓋解構(gòu)這一重要的新語法,以及如何使用它從對(duì)象、數(shù)組和其他可迭代對(duì)象中提取數(shù)據(jù),該章包含默認(rèn)值、嵌套提取等語法。
第8章,Promise——深入研究這個(gè)用于處理異步過程的重要新工具。
第9章,異步函數(shù)、迭代器和生成器——詳細(xì)介紹新的async/await語法(它允許你在異步代碼中使用熟悉的邏輯流結(jié)構(gòu)),以及異步迭代器和生成器的工作方式,還有新的for-await-of循環(huán)。
第10章,模板字面量、標(biāo)簽函數(shù)和新的字符串特性——描述模板字面量語法、標(biāo)簽函數(shù)和許多新的字符串特性,如更好的Unicode支持、常見方法的更新以及很多新方法。
第11章,新數(shù)組特性、類型化數(shù)組——涵蓋很多新的數(shù)組方法、各種已有方法的更新、類型化數(shù)組(如Int32Array)以及與類型化數(shù)組數(shù)據(jù)交互的高級(jí)特性。
第12章,Map和Set——介紹所有新的有鍵集合Map和Set,以及這些集合的“弱”版本W(wǎng)eakMap和WeakSet。
第13章,模塊——深入了解這個(gè)令人興奮且強(qiáng)大的代碼組織方式。
第14章,反射和代理——涵蓋Reflect和Proxy對(duì)象的強(qiáng)大動(dòng)態(tài)元編程特性以及它們之間的關(guān)系。
第15章,正則表達(dá)式更新——描述過去幾年正則表達(dá)式出現(xiàn)的所有更新,如新的標(biāo)志、命名捕獲組、反向預(yù)查和新的Unicode特性。
第16章,共享內(nèi)存——涵蓋JavaScript程序中有關(guān)跨線程共享內(nèi)存的復(fù)雜而棘手的方面,其中包括SharedArrayBuffer和Atomics對(duì)象、基本概念和陷阱注釋。
第17章,其他特性——涵蓋很多不適合放到其他章節(jié)的新特性:BigInt、新的整數(shù)字面量語法(二進(jìn)制、新的八進(jìn)制)、省略catch 綁定的異常、新的 Math 方法、取冪運(yùn)算符、Math對(duì)象的擴(kuò)展、尾遞歸優(yōu)化、空值合并、可選鏈,以及出于兼容性原因而定義的“規(guī)范附錄B”(僅瀏覽器)特性。
第18章,即將推出的類特性——描述在提案流程中處于階段3的類的增強(qiáng)特性:公有字段聲明、私有字段和私有方法。
第19章,展望未來——最后,描述目前正在進(jìn)行的一些改進(jìn):頂層await、WeakRef和清理回調(diào)、正則表達(dá)式匹配索引、Atomics.asyncWait、一些新的語法特性、舊的正則表達(dá)式特性,以及各種即將推出的標(biāo)準(zhǔn)庫擴(kuò)展。
附錄,出色的特性及對(duì)應(yīng)的章(向J. K. Rowling致歉)——提供新特性的列表,并指出每個(gè)特性所屬的章節(jié)。這些列表包括:按字母順序排列的特性,新的基礎(chǔ)知識(shí),新的語法、關(guān)鍵字、運(yùn)算符、循環(huán)等,新的字面量形式,標(biāo)準(zhǔn)庫的擴(kuò)展和更新,以及其他特性。
《深入理解現(xiàn)代JavaScript》讀者對(duì)象
《深入理解現(xiàn)代JavaScript》的讀者應(yīng)該:
● 至少對(duì)JavaScript有基本的了解。
● 想了解過去幾年中增加的新特性。
這不是一本為專家編寫的學(xué)術(shù)書籍,而是一本面向JavaScript開發(fā)人員的實(shí)用性書籍。
幾乎所有拿起《深入理解現(xiàn)代JavaScript》的人都知道書中的一些內(nèi)容,但幾乎沒有人拿起這本書時(shí)就已經(jīng)知道了所有內(nèi)容。也許你已經(jīng)清楚let和const的基礎(chǔ)知識(shí),但是還沒有完全掌握async函數(shù)。也許Promise對(duì)你來說已經(jīng)是舊語法了,但你在一些現(xiàn)代代碼中看到了一些不認(rèn)識(shí)的語法。你可以在《深入理解現(xiàn)代JavaScript》中找到ES2015~ES2020(及后續(xù)版本)的所有新特性。
如何使用《深入理解現(xiàn)代JavaScript》
建議先閱讀第1章。第1章定義了《深入理解現(xiàn)代JavaScript》其余部分使用的很多術(shù)語。如果跳過第1章,你很可能會(huì)在閱讀《深入理解現(xiàn)代JavaScript》時(shí)遇到困難。
之后,你可以選擇按順序閱讀各章,或者跳著閱讀。
我以這樣的順序安排各章內(nèi)容是有原因的,而且每個(gè)章節(jié)都與前面章節(jié)息息相關(guān)。例如,第8章介紹的Promise,對(duì)于理解第9章中的async函數(shù)很重要。當(dāng)然,建議你按照我安排的順序閱讀《深入理解現(xiàn)代JavaScript》。不過我敢肯定,你是一個(gè)有自己想法的聰明人,如果你不按照順序閱讀,也沒關(guān)系。
建議你閱讀(或者至少略讀)所有的章節(jié)(第16章可能除外,稍后再談這個(gè)問題)。即使你認(rèn)為自己已了解某個(gè)特性,也可能不知道或者只是認(rèn)為自己知道書中的一些內(nèi)容。例如,也許你打算跳過第2章,因?yàn)槟阋呀?jīng)知道關(guān)于let和const的所有知識(shí)。你甚至知道為什么下面的代碼創(chuàng)建了10個(gè)不同的變量i:
for (let i = 0; i < 10; ++i) { /…/
setTimeout(() => console.log(i));
}
還有,如果像這樣使用:
let a = “ay”;
var b = “bee”;
為什么會(huì)在全局作用域創(chuàng)建window.b屬性,卻沒有創(chuàng)建window.a屬性?即使這些你都清楚,我也建議你略讀第2章,以確保你掌握所有內(nèi)容。
第16章有點(diǎn)特殊:它是關(guān)于如何在線程之間共享內(nèi)存的。大多數(shù)JavaScript開發(fā)人員都不需要在線程之間共享內(nèi)存。但有些開發(fā)人員需要,這也是第16章存在的原因;而大多數(shù)人不需要,如果你屬于這一類,則可跳過該章;如果你認(rèn)為自己在將來某個(gè)時(shí)候需要共享內(nèi)存,可再回到第16章中學(xué)習(xí)它,這沒關(guān)系。文章來源:http://www.zghlxwxcb.cn/news/detail-751977.html
此外,運(yùn)行《深入理解現(xiàn)代JavaScript》的示例,用它們進(jìn)行試驗(yàn),祝你編程愉快。文章來源地址http://www.zghlxwxcb.cn/news/detail-751977.html
到了這里,關(guān)于手把手帶你學(xué)習(xí) JavaScript 的 ES6 ~ ESn的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!