3dwoo大學簡體電腦書店
ECMAScript 2018快速入門
( 簡體 字)
作者:黃燈橋類別:1. -> 程式設計 -> 網路編程 -> Javascript
出版社:清華大學出版社ECMAScript 2018快速入門 3dWoo書號: 50491
詢問書籍請說出此書號!
有庫存
NT售價: 145
出版日:1/1/2019
頁數:130
光碟數:0
站長推薦:
印刷:黑白印刷語系: ( 簡體 字 )
ISBN:9787302516811 加入購物車加到我的最愛 (請先登入會員)
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證, 繁體書的下載亦請直接連絡出版社)
第1章變量與常量	1
1.1var的問題 1
1.2let語句 2
1.3使用let的好處 2
1.3.1避免重復聲明 2
1.3.2避免變量未聲明就使用 3
1.3.3避免全局變量成為全局對象的屬性 3
1.3.4簡化代碼 3
1.3.5模擬私有成員 4
1.4const語句 5
1.5建議的方式 6
1.6小結 6
第2章表達式和運算符 7
2.1解構賦值 7
2.1.1自定義變量名 8
2.1.2剩余項 8
2.1.3默認值 9
2.1.4函數參數 9
2.1.5忽略某些數據 10
2.1.6克隆數組 11
2.1.7克隆對象 11
2.1.8數據交換 11
2.1.9返回多個值 12
2.2冪運算符 12
2.2.1右結合 13
2.2.2帶歧義的冪運算 13
2.3Math對象 13
2.4小結 14
第3章字符串 15
3.1四字節字符的定義方式 15
3.2新增的方法 15
3.2.1codePointAt方法 15
3.2.2fromCodePoint方法 16
3.2.3normalize方法 16
3.2.4includes方法 17
3.2.5startsWith方法 17
3.2.6endsWith方法 18
3.2.7repeat方法 18
3.2.8padStart和padEnd方法 18
3.3正則表達式 19
3.3.1u標志 19
3.3.2y標志 19
3.3.3DOTALL模式(s標志) 20
3.3.4flags屬性 20
3.3.5命名捕獲組 20
3.3.6在后向引用中使用命名捕獲組 21
3.3.7在替換中使用命名捕獲組 21
3.3.8Unicode屬性轉義 21
3.3.9后行斷言 22
3.4模板字面量 22
3.4.1語法 23
3.4.2多行文本 24
3.4.3嵌入數據 24
3.4.4嵌套模板 24
3.4.5帶標簽的模板字面量 26
3.4.6原始值 26
3.4.7轉義字符序列的功能修改 27
3.5小結 27
第4章數字和符號 28
4.1數字 28
4.1.1Number.isFinite() 28
4.1.2Number.isNaN() 29
4.1.3Number.parseInt()和Number.parseFloat() 29
4.1.4Number.isInteger() 29
4.1.5安全整型 30
4.2符號 30
4.2.1值的唯一性 31
4.2.2私有成員 31
4.2.3獲取符號屬性 32
4.2.4全局共享 33
4.3眾所周知的符號 33
4.3.1Symbol.hasInstance 33
4.3.2Symbol.isConcatSpreadable 34
4.3.3Symbol.iterator 35
4.3.4Symbol.match 35
4.3.5Symbol.replace 35
4.3.6Symbol.search 35
4.3.7Symbol.split 35
4.3.8Symbol.species 35
4.3.9Symbol.toPrimitive 36
4.3.10Symbol.toStringTag 36
4.3.11Symbol.unscopables 37
4.4小結 37
第5章數組和類型化數組 39
5.1新方法 39
5.1.1of方法 39
5.1.2from方法 40
5.1.3find方法 40
5.1.4findIndex方法 41
5.1.5fill方法 41
5.1.6copyWithin方法 41
5.1.7includes方法 41
5.1.8entries方法 42
5.1.9keys方法 42
5.1.10values方法 42
5.2類型化數組 42
5.2.1數據類型 42
5.2.2數組緩沖區 43
5.2.3數據視圖 43
5.2.4類型化數組即視圖 45
5.2.5類型化數組與數組的主要區別 45
5.3小結 46
第6章對象 47
6.1屬性簡寫 47
6.2方法簡寫 47
6.3未定的屬性名和方法名 48
6.4新方法 49
6.4.1is方法 49
6.4.2assign方法 49
6.4.3values方法 51
6.4.4entries方法 52
6.4.5getOwnPropertyDescriptors方法 52
6.5原型 53
6.6super關鍵字 54
6.7小結 55
第7章函數 56
7.1參數的默認值 56
7.1.1設置默認值 56
7.1.2參數默認值表達式 57
7.1.3使用參數值作為默認值 57
7.1.4使用參數值作為默認值表達式的參數 58
7.2剩余參數 58
7.3擴展運算符 59
7.4name屬性 59
7.4.1聲明函數 59
7.4.2函數表達式 60
7.4.3對象的方法 60
7.4.4bind方法創建的函數 60
7.4.5newFunction創建的函數 60
7.4.6實例 61
7.5new.target屬性 61
7.6在參數中使用尾后逗號 62
7.7箭頭函數 62
7.7.1基本語法 62
7.7.2箭頭必須與參數在同一行 63
7.7.3不綁定this 63
7.7.4沒有arguments對象 65
7.7.5定義方法時使用箭頭函數 65
7.7.6不能用作構造函數 65
7.7.7沒有原型 65
7.7.8不能作為生成器 65
7.7.9返回對象字面量 65
7.8小結 65
第8章集合和映射 67
8.1Set 67
8.1.1基本語法 67
8.1.2添加和刪除元素 67
8.1.3清空Set 68
8.1.4判斷某個值是否存在 68
8.1.5遍歷 68
8.1.6返回元素總數 68
8.1.7轉換為數組 68
8.2WeakSet 68
8.2.1基本語法 69
8.2.2添加和刪除元素 69
8.2.3判斷某個值是否存在 69
8.2.4不可遍歷 69
8.3Map 69
8.3.1基本語法 70
8.3.2添加和刪除元素 70
8.3.3獲取值 70
8.3.4清空Map 71
8.3.5判斷某個鍵是否存在 71
8.3.6遍歷 71
8.3.7返回元素總數 71
8.4WeakMap 71
8.4.1基本語法 71
8.4.2添加和刪除元素 72
8.4.3獲取值 72
8.4.4判斷某個鍵是否存在 72
8.4.5不可遍歷 72
8.5小結 72
第9章迭代器和生成器 73
9.1迭代器 73
9.1.1內置迭代器 73
9.1.2next方法 73
9.1.3對象與迭代器 74
9.2異步迭代器 74
9.3生成器 74
9.3.1基本語法 75
9.3.2返回可迭代對象 75
9.3.3在類或對象中定義生成器 75
9.3.4高級生成器 76
9.3.5拋出錯誤 78
9.3.6return語句 78
9.3.7任務隊列 79
9.3.8異步生成器 81
9.4for…of循環 81
9.5forawait…of循環 82
9.6小結 82
第10章Promise對象與異步函數 83
10.1Promise對象 83
10.1.1基本語法 83
10.1.2Promise的狀態 84
10.1.3then方法 84
10.1.4catch方法 85
10.1.5all方法 85
10.1.6race方法 86
10.1.7resolve方法 86
10.1.8reject方法 86
10.1.9finally方法 86
10.2異步函數 86
10.3小結 87
第11章代理 88
11.1Reflect對象 88
11.2使用代理 89
11.3可代理的操作 90
11.3.1getPrototypeOf操作 90
11.3.2setPrototypeOf操作 90
11.3.3isExtensible操作 91
11.3.4preventExtensions操作 91
11.3.5getOwnPropertyDescriptor操作 91
11.3.6defineProperty操作 92
11.3.7has操作 92
11.3.8get操作 93
11.3.9set操作 94
11.3.10deleteProperty操作 94
11.3.11ownKeys操作 95
11.3.12apply操作 96
11.3.13construct操作 96
11.4可撤銷的代理對象 97
11.5小結 97
第12章類和模塊 98
12.1類 98
12.1.1類的聲明 98
12.1.2類表達式 98
12.1.3定義屬性 99
12.1.4定義方法 99
12.1.5訪問器屬性 99
12.1.6靜態方法 100
12.1.7繼承 100
12.1.8使用super調用父類同名方法 100
12.2模塊 101
12.2.1導出 101
12.2.2導入 102
12.2.3合并導出 103
12.2.4無綁定的導入 103
12.3模塊的加載 104
12.4小結 104
第13章自己動手寫一個框架 105
13.1框架的類型 105
13.2開發工具 105
13.2.1開發工具的選擇 105
13.2.2安裝VisualStudioCode 106
13.2.3配置開發環境 110
13.3編寫框架 111
13.3.1創建和配置項目 111
13.3.2安裝Gulp 112
13.3.3安裝Browserify 113
13.3.4安裝Watchify 113
13.3.5安裝Babel 113
13.3.6安裝Uglify 114
13.3.7配置Gulp 114
13.3.8添加DOM操作 118
13.3.9添加樣式操作 119
13.3.10添加樣式類操作 122
13.3.11添加屬性操作 123
13.3.12添加事件操作 125
13.3.13添加Ajax功能 127
13.4小結 129
ECMAScript是一種由ECMA國際通過ECMA-262標準化的腳本程序設計語言,目前最新版本為ECMAScript 2018。JavaScript是這個標準的一個實現和擴展。這種語言廣泛用于Web前端開發,可以說想成為一名前端開發高手,就必須掌握ECMAScript。
本書分為13章,較為系統地介紹ECMAScript語言,內容包括變量與常量、表達式和運算符、字符串、數字和符號、數組和類型化數組、對象、函數、集合和映射、迭代器和生成器、Promise對象與異步函數、代理、類和模塊,最后引導讀者自己動手寫一個JS框架。
本書適合Web前端初學者、不了解ECMAScript的Web前端開發人員,也適合高等院校和培訓學校相關專業的師生進行參考。
1994年,第一個比較成熟的瀏覽器Navigator(0.9版本)發布的時候,只是一個純瀏覽器工具,不具備互動功能。為了解決互動問題,網景公司希望能通過一種腳本語言來實現。至于使用什么語言,網景公司一時也難以決定。這時,Sun公司推出了Java,給人的感覺就是擁抱了Java,就等于擁抱了未來。作為Java的信徒,網景公司于是選擇與Sun合作,推出JavaScript語言。
網景的本意是制作一個Java的簡化版腳本語言,但很不幸,他們請來開發JavaScript語言的設計師Brendan Eich 并不是Java的信徒,只用10天時間就將JavaScript寫出來了。不過,JavaScript并沒有成為簡化版的Java,而是成了一個大雜燴,使用了C語言的語法、Java語言的數據類型和內存管理,借鑒Scheme,把函數式開發作為主要開發方式,借鑒Self語言,使用基于原型(prototype)的繼承機制。這個大雜燴就這樣成為我們現在使用起來比較酸爽的JavaScript。以至于作為JavaScript的設計師,他自己一點都不喜歡這個作品:“與其說我愛JavaScript,不如說我恨它。它是C語言和Self語言結合的產物。十八世紀英國文學家約翰遜博士說得好:‘它的優秀之處并非原創,它的原創之處并不優秀’”。這都是和公司決策層妥協后的結果。而這造成的最終結果就是不少人誤以為JavaScript就是Java,為了修正JavaScript的開發問題,不斷衍生出不同版本的衍生語言,如CoffeeScript、TypeScript等。這件事給編者的第一觀感就是情懷這東西,太有毒了,不得不時常用來提醒自己。想當初,編者也是有情懷的,也曾自學過Java,但在使用過后,加上Sun和微軟的Java之爭,就再也不去考慮了。
網景推出了這樣一種語言,微軟等其他公司也不甘落后,都各自推出了自己的腳本語言。如果各大公司都這樣各自獨立地發展下去,那么最頭疼的就是開發人員了,為了解決各瀏覽器的兼容性問題,那可是要費九牛二虎之力的。還好,網景做了一個好的表率,在1996年11月,將JavaScript提交給了國家標準化組織ECMA,使JavaScript成了一種國際標準,各大公司雖然有私心,但也不得不遵守標準,不然,最大的后果就是被開發人員甚至用戶拋棄。在1997年,ECMA發布262號標準文件的第一版,也就是ECMAScript 1.0。JavaScript這個名稱只是人們習慣的說法,它的正式名稱是ECMAScript,這樣做一是因為JavaScript是網景公司的商標,不便于使用,二是為了保證這門語言的開放性和中立性。
ECMAScript在1998年發布了2.0版本,在1999年發布了3.0版本,然后就戛然而止。這其中的原因是在2000年醞釀ECMAScript 4.0的時候,版本太過于激進了,導致標準委員會的一些成員不愿意接受。2007年10月,ECMAScript 4.0版草案發布,但在發布正式版本前,又發生了嚴重分歧。其中,雅虎、微軟和谷歌等為首的大公司反對大幅升級,主張小幅改動,這畢竟關系到他們的利益,而以Brendan Eich為首的Mozilla則堅持當前的草案。事情鬧得不可開交,到了2008年7月,ECMA不得不中止ECMAScript 4.0的開發,將其中一部分小的功能改善發布為3.1版本,而激進的改動則留待以后解決。在2009年12月,將ECMAScript 3.1改名為ECMAScript 5.0發布。2011年6月,ECMAScript 5.1版發布,并且成為ISO國際標準(ISO/IEC 16262:2011)。
2013年3月,ECMAScript 6草案凍結,不再添加新功能。新功能設想將被放到ECMAScript 7。2013年12月,ECMAScript 6草案發布。然后是12個月的討論期,聽取各方反饋。2015年6月,ECMAScript 6正式通過,成為國際標準。從這一版本開始,ECMAScript 6更名為ECMAScript 2015,也就是以年份作為版本號,不再使用以往的版本號。之后就每年發布一個版本,直到如今的ECMAScript 2018。
綜觀JavaScript的發展,與行業的發展是密不可分的。在JavaScript誕生后,程序員就開始考慮如何利用JavaScript來構建更豐富的客戶端。例如,編者2000年在一家網絡公司工作時,為了實現項目中的日期選擇,就與同事合作編寫了日期選擇器,之后,又完成了一個顏色選擇器。不過,這項工作沒持續多長時間,編者就離開了,沒繼續從事這方面的工作。當編者重新走上Web開發的路途時,JavaScript已經從以前的單一組件化(如HTC、DXHtml等)走向了框架化。
在這里不得不提一下微軟、谷歌和雅虎的貢獻。XMLHttpRequest對象是微軟發明的,被整合到了IE 4中,不過,在當時并沒有引起什么轟動,直到谷歌在谷歌地圖中用它實現了令人驚艷的交互效果,才引發了一場我們稱之為Web 2.0的技術革命。伴隨著Web 2.0的步伐,各種JavaScript框架以井噴的形式爆發。在這波大潮當中,雅虎的YUI可以說是第一個相當實用的圖形界面(UI)庫,可惜的是,最終用的人并不多。不過,雅虎的另一個貢獻YUI Compressor卻非常受歡迎,它本來是為YUI服務的,可將零散的YUI文件壓縮為一個單一的腳本包,而最終發展成為各種框架或腳本應用程序的壓縮打包程序,而這無疑是腳本發展的一個跨越。試想一下,對于一個大型項目或者框架來說,總不可能把腳本都寫在一個文件里,但文件太多,對服務器負載和瀏覽器的響應來說都是難以接受的,通過壓縮和打包的方式將文件壓縮并合并到一個文件,對于服務器的負載和瀏覽器的響應就好很多了,無疑大大促進了框架的發展。
隨著移動互聯網的發展,JavaScript的應用越來越廣泛,項目逐漸擴大,為了滿足發展的需要,JavaScript不得不變,于是更新頻率越來越快。
JavaScript版本當然是越新越好,但要使用最新版本的JavaScript,就必須考慮瀏覽器的兼容性問題。如果不能兼容大多數瀏覽器,那么部分工作就要重來,這是任何項目都難以承受的。編者在使用Ext JS開發項目的時候,排在第一位的需求是客戶對瀏覽器有什么要求,如果一定要兼容IE 8以下的瀏覽器,編者建議不要使用Ext JS,換其他對這些瀏覽器兼容性更好的版本。當然,這在開發效率上是有所降低的,并且開發成本會上升。好在這方面要求比較高的客戶不算太多,畢竟現在還死守IE瀏覽器的用戶不是太多。編者秉持的觀點是為了這一點點的用戶而去犧牲開發效率、開發成本以及維護成本,不值得。而且用戶也不是鐵板一塊,或許他們早厭煩了IE,只是沒有機會,或者沒有動力,或者不知道怎么去更換瀏覽器而已。在使用最新版本的ECMAScript方面就比編者使用Ext JS彈性大了,通過代碼轉換器和填充代碼等方式,可以將代碼轉換為兼容老舊瀏覽器的代碼,非常方便,還好,Ext JS這個框架也在往這個方向遷移。可以預見,未來JavaScript的開發模式基本都是使用NodeJS以及各種類庫,使用最新的ECMAScript來開發項目的。能早點熟悉這種開發模式,對于要進入這個行業的開發人員來說是必不可少的。本書最后的例子就是為大家熟悉這種開發模式而專門添加的。
本書的開發環境如下。
● 操作系統:Windows 10。
● 開發工具:Visual Studio Code。
● NodeJS:10.7.0。
● 瀏覽器:Firefox 61.0.1
本書的源代碼放在GitHub上,大家可以自行到相應的地址下載。

在本書的出版過程中,得到了清華大學出版社圖格新知事業部編輯的大力支持,在他們的努力下,促成了本書的出版,在此表示衷心的感謝。此外,還要感謝那些在互聯網上默默耕耘的博客作者以及在各大論壇回復問題的大牛們,是他們的努力耕耘,才使編者找到解決問題的辦法,是他們讓編者有了進一步提高技能的機會。



編 者
2018年11月
pagetop