本書主要講述了從 1995 年到 2015 年這20年間,JavaScript在創(chuàng)建、設(shè)計(jì)和演變方面所經(jīng)歷的過程。全書分為4個(gè)部分,每個(gè)部分都涵蓋了 JavaScript 發(fā)展和演化的一個(gè)主要階段,其中不僅涉及語言發(fā)展的技術(shù)細(xì)節(jié),還介紹了人們和組織如何在競爭與合作中逐漸塑造 JavaScript 語言的故事。本書適合JavaScript初學(xué)者和開發(fā)人員閱讀和使用,也適合非JavaScript從業(yè)者翻閱。
譯者簡介:王譯鋒(雪碧),Web開發(fā)者,畢業(yè)于中國科技大學(xué),現(xiàn)就職于稿定科技,先后負(fù)責(zé)Web生產(chǎn)力工具、語言VM運(yùn)行時(shí)、Hybrid GUI框架等技術(shù)產(chǎn)品的研發(fā)工作。他同樣活躍在技術(shù)社區(qū),開源了WebGL基礎(chǔ)庫Beam,在知乎、掘金等平臺(tái)上發(fā)表的文字作品,已累計(jì)被閱讀超百萬次。長期以來,JavaScript一直是世界上極易被誤解的編程語言之一。本書終于糾正了外界對(duì) JavaScript歷史的諸多誤解!禞avaScript語言精粹》作者 Douglas Crockford本書由JavaScript之父Brendan Eich執(zhí)筆,介紹了只用十天開發(fā)出的JavaScript是如何一步一步成為流行的編程語言之一的。如果你是一名前端開發(fā)者,這本書絕對(duì)不容錯(cuò)過。Deno核心貢獻(xiàn)者 迷渡(justjavac)JavaScript已經(jīng)有二十多年歷史了,回望過去,它從當(dāng)初毛毛糙糙的“小東西”變成了現(xiàn)在如同變形金剛一樣的編程語言。本書幫助我們回憶了JavaScript的歷史,甚至講了一些我們從不知道的故事,可謂是一本讓人讀到“停不下來”的好書。Node.js Core Collaborator,《Node.js:來一打C++擴(kuò)展》作者 死月LeeLING 15:04:19由JavaScript發(fā)明者與ES6規(guī)范首席作者聯(lián)袂出品的語言演化史研究,帶你解讀語言標(biāo)準(zhǔn)化背后技術(shù)與商業(yè)上的種種競爭與合作。對(duì)于JavaScript誕生二十年來的種種語言設(shè)計(jì),其根源均可在本書中找到答案。
第 1 篇 語言誕生
第 1 章 史前時(shí)代 ..................................................................................3
1.1 Brendan Eich 加入網(wǎng)景 ........................................................................4
1.2 Mocha 的故事 ......................................................................................5
第 2 章 JavaScript 1.0 與 1.1................................................................8
2.1 JavaScript 語法 ..................................................................................10
2.2 數(shù)據(jù)類型與表達(dá)式 .............................................................................11
2.3 對(duì)象 ...................................................................................................14
2.4 函數(shù)對(duì)象 ............................................................................................17
2.5 內(nèi)置庫 ...............................................................................................18
2.6 執(zhí)行模型 ............................................................................................20
2.7 迷惑行為與 bug .................................................................................22
2.7.1 冗余聲明 ...............................................................................22
2.7.2 隱式類型轉(zhuǎn)換與 = = 運(yùn)算符 ..................................................23
2.7.3 32 位算術(shù) ..............................................................................23
2.7.4 this 關(guān)鍵字.............................................................................24
2.7.5 arguments 對(duì)象 ......................................................................24
2.7.6 對(duì)數(shù)值屬性鍵的特殊處理 .....................................................25
2.7.7 原始值的屬性 ........................................................................26
2.7.8 JavaScript 中的 HTML 注釋 ..................................................26
xxiv | JavaScript二十年
第 3 章 微軟 JScript ...........................................................................28
第 4 章 從 Mocha 到 SpiderMonkey ....................................................30
第 5 章 插曲 :風(fēng)評(píng)被害 ......................................................................35
第 2 篇 創(chuàng)立標(biāo)準(zhǔn)
第 6 章 尋找場(chǎng)地 ................................................................................39
第 7 章 首次 TC39 會(huì)議 ......................................................................41
第 8 章 編寫規(guī)范 ................................................................................45
第 9 章 命名標(biāo)準(zhǔn) ................................................................................50
第 10 章 ISO 快速通道 .......................................................................52
第 11 章 定義 ECMAScript 3 ..............................................................53
第 12 章 插曲 :JavaScript 不需要 Java ..............................................63
12.1 布道師 .............................................................................................63
12.2 富互聯(lián)網(wǎng)應(yīng)用與 AJAX ....................................................................64
12.3 瀏覽器博弈論 ..................................................................................67
第 3 篇 改革失敗
第 13 章 不滿于成功 ...........................................................................71
第 14 章 對(duì) ES4 的第一輪嘗試 ............................................................72
第 15 章 另一條死路 ...........................................................................78
第 16 章 Flash 與 ActionScript ...........................................................80
目錄 | xxv
第 17 章 對(duì) ES4 的第二輪嘗試 ............................................................82
17.1 重置 TC39-TG1 ...............................................................................82
17.2 重新設(shè)計(jì) ES4 ..................................................................................83
17.3 阻力 .................................................................................................87
17.4 尋求和諧 ..........................................................................................93
第 18 章 插曲 :認(rèn)真對(duì)待 JavaScript ................................................. 100
18.1 JavaScript 性能革命 .......................................................................100
18.2 CommonJS 和 Node.js ...................................................................101
18.3 成為瀏覽器通用運(yùn)行時(shí)的 JavaScript.............................................103
第 4 篇 繼往開來
第 19 章 開發(fā) ES3.1/ES5 ................................................................. 109
19.1 ES5 技術(shù)設(shè)計(jì) ................................................................................114
19.1.1 嚴(yán)格模式 ...........................................................................114
19.1.2 Getter、Setter 和對(duì)象元操作 .............................................116
19.1.3 對(duì)象的完整性與安全性特性 ..............................................122
19.1.4 活動(dòng)對(duì)象(Activation Object)的移除 .............................125
19.1.5 其他 ES5 特性 ...................................................................126
19.2 實(shí)現(xiàn)與測(cè)試 ....................................................................................127
第 20 章 從 Harmony 到 ECMAScript 2015 ....................................... 130
20.1 開始投入 Harmony ........................................................................130
20.1.1 稻草人(Strawman)與目標(biāo) .............................................130
20.1.2 倡導(dǎo)者模型 ........................................................................132
20.1.3 選擇特性集 ........................................................................132
20.1.4 開始編寫規(guī)范 ....................................................................133
20.1.5 One JavaScript ...................................................................134
20.1.6 Brendan 的夢(mèng)想 .................................................................135
20.2 重新打造規(guī)范 ................................................................................138
20.2.1 重組規(guī)范結(jié)構(gòu) ....................................................................139
20.2.2 新的術(shù)語 ...........................................................................140
20.2.3 新的語義種類 ....................................................................141
20.3 ES2015 語言特性 ...........................................................................142
20.3.1 Realms、Jobs、Proxies 和元對(duì)象編程(MOP) ................142
xxvi | JavaScript二十年
20.3.2 塊級(jí)聲明作用域 ................................................................147
20.3.3 類 .......................................................................................151
20.3.4 模塊 ...................................................................................156
20.3.5 箭頭函數(shù) ...........................................................................159
20.3.6 其他特性 ...........................................................................161
20.3.7 延期和被放棄的特性 .........................................................162
20.4 Harmony 轉(zhuǎn)譯器 ............................................................................162
20.5 完成 ECMAScript 2015 .................................................................163
第 21 章 總結(jié) ................................................................................... 166
致謝 ................................................................................................... 168
附錄 A 登場(chǎng)人物 ............................................................................... 170
附錄 B 登場(chǎng)組織 ............................................................................... 175
附錄 C 術(shù)語表 .................................................................................. 177
附錄 D 縮略語和首字母縮寫詞 .......................................................... 182
附錄 E 時(shí)間線 .................................................................................. 184
附錄 F 1995 年 12 月 4 日的 JavaScript 公告 ..................................... 200