商品簡介
本書主要講述了從 1995 年到 2015 年這20年間,JavaScript在創建、設計和演變方面所經歷的過程。全書分為4個部分,每個部分都涵蓋了 JavaScript 發展和演化的一個主要階段,其中不僅涉及語言發展的技術細節,還介紹了人們和組織如何在競爭與合作中逐漸塑造 JavaScript 語言的故事。
本書適合JavaScript初學者和開發人員閱讀和使用,也適合非JavaScript從業者翻閱。
作者簡介
Allen Wirfs-Brock
編程語言及實現方面的專家,在開發編譯器、虛擬機、編程環境和完整的計算機系統方面有著豐富的經驗。他是面向物件編程技術興起時期的技術創新者和業務領導者,並深度參與了 Smalltalk編程語言的開發過程。在2009-2015年,他是ECMAScript語言規範的項目編輯。
Brendan Eich
Brave Software和Basic Attention Token的聯合創始人兼CEO。他曾擔任Mozilla公司的CTO和CEO。在此之前,他是Mozilla項目和基金會的聯合創始人。在Mozilla工作期間,他協助推出了屢獲殊榮的Firefox網絡瀏覽器。Brendan Eich也是JavaScript的發明者,這是互聯網上使用最廣泛的編程語言之一。
名人/編輯推薦
√ 語言誕生、標準創立、改革失敗、既往開來四大華彩樂章,真實且深刻地記錄了JS發展關鍵節點的每一個人每一種選擇每一次犧牲,用語言締造者的獨到視角、敏銳觀察和深刻理解,將這門偉大語言的崢嶸與妙趣一一呈現。
√ 跟隨當事人穿梭於 JavaScript 二十年發展史之間,從十天發明 JavaScript 的歷史故事再到 ES1 標準化的合縱連橫,再到 ES4 的失意、ES5 的妥協與 ES6 的成功,本書將為你解答種種“語言為什麼要設計成這樣”的問題。
√ 以下中外前端風云人物撰文力薦此書:周愛民|Hax|Douglas(老道)|justjavac|死月|月影|李玉北|張云龍|顧軼靈|黃軼|於航|沈毅|黃玄|工業聚|小爝|一絲|題葉|染陌|Jasin Yip|LucasHC|小帥|寒雁|太狼|敖天羽|xcatliu|Himself65。
√ 本書可謂由JavaScript發明者與ES6規範首席作者聯袂出品的語言演化史研究,不僅解讀了語言標準化背後技術與商業上的種種競爭與合作,JavaScript誕生以來歷次語言設計變革的思想根源,均可在其中找到答案。
序
推薦序
一幅畫是一個加法的總和。至於我,一幅作品如同一個減法的得數。——畢加索
版畫《公牛》是畢加索的代表作之一,它記錄了這位繪畫大師如何在十餘次的描摹與抽象迭代後,在最終的作品中深刻地體現了牛的健壯、斗志及其外在的結構特征。然而,並不是每件作品的創作歷程都能得到這樣的記錄和展示。
JavaScript 從最初的一個可用成品發展到如今最優秀的跨端語言之一,在這個過程中既有激昂的戰斗,也有悄然的沉沒。它曾是“獨擁天下的王者”,但也歷經“瀕死復生的涅槃”。
榮光的背後是十多年的灰暗時代,即便是 ES5,也只如同一道曙光卻未能讓 JavaScript走出語言特性匱乏的陰霾。包括我在內的許多人,在多年之後仍然驚訝於人們在那個時代的絕望與沉默,多數人選擇了在 ES3 的基礎上添加一個又一個的語言擴展包,把JavaScript 打造成“自己想要的樣子”——其實更像其他某種語言的模樣。而同時我們
又對每個與之類似的東西付之一笑 :這要麼又是一個輪子發明,要麼又是一個空想世界。
在 TC39 的不懈努力下,如今的 JavaScript 已經成為了另一個“加法的總和”。這種以產品化與應用性為主導的力量推動了 JavaScript 得以被重新定義並再次啟程,而曾經廠商之間的博弈、規範制定者的取舍、社區中褒貶不一的聲音等都湮沒在了歷史的沙塵中。
與畢加索最終畫成的極簡風格的抽象公牛相反,JavaScript 已經從早期的簡單粗陋進化到如今的異常復雜。如同所有偉大的設計作品一樣,JavaScript 也有著獨特的思想、美好的期望,加上其本身的混合語言特性,我們已經很難再從這種語言中找到如同“牛的抽象”般的內在實質。而如果我們要從漸行漸遠的歷史片段中尋找和獲取這樣的實質,
是需要擁有像畢加索一樣的獨特的透視能力與抽象技法的。如果未能領悟 JavaScript 的結構與性質,也就無法有效地推動它的進化,它可能因此變得不倫不類,甚至成為其他語言的代名詞。
抽象的加法是在其減法之後再進行的。在某個時刻,向系統中增加一個特性遠比刪減一個特性更難。這是在 ES6 之後 TC39 面臨的最大挑戰,也是我們深入理解和應用JavaScript時必須面對的真相。而本書足以讓讀者去探索那些不朽思想與遠大期望的由來,
追溯 JavaScript 自誕生以來所存的精神實質。我們將看到 Eich 對早期 JavaScript 的憶述,以及 Allen 在 TC39 工作中推進 ECMAScript 的詳實記錄。其中的每一個人、每一種選擇、每一次“犧牲”,都通過作者獨到的視角、敏銳的觀察和深刻的理解呈現在我們面前。
感謝作者和譯者帶給我們的關於 JavaScript 的真實且深刻的記錄,向我們完整地展示了JavaScript 的成長過程。這本書如同“畢加索的牛”一般,讓我們看見了思想的碰撞、言辭的論辯,以及看似決斷之下的內心掙扎。我真誠地向你推薦它!
——周愛民
2021 年 4 月 3 日
譯者序
作為經常因面試而接觸同行的前端開發者,我常常感嘆於 JavaScript 的用途之廣。無論是農業、娛樂業,還是航天、軍工等行業,都存在基於 JavaScript 的 Web 技術棧所實現的各種項目。毫無疑問地,JavaScript 深刻地影響著這個世界。
值得慶幸的是,和行業先驅者的直接交流尚屬“年輕的”計算機業界的特權。試想,今天的火箭工程師們還有機會向馮布勞恩和科羅廖夫請教經驗嗎?尤其像編程語言這樣深受歷史決策影響的領域,要想解讀諸多特性設計上的取舍,更需要了解其歷史淵源。所幸在本書兩位作者 Allen Wirfs-Brock 和 Brendan Eich 的努力下,JavaScript 從誕生到成
熟的二十年演化歷史終於得到了系統性的整理和沉澱。從 ES1 的誕生到 ES4 的失意,再到 ES5 的妥協與 ES6 的成功,作為這段歷史進程的權威參與者和見證者,兩位作者正是最適合完成這項工作的人選。
在歷史長河中,二十年看似微不足道,但足以使一個孩子長大成人,使一種編程語言脫胎換骨。1995 年,當 Brendan Eich 在十天的時間裡寫出 Mocha 解釋器時,我才剛滿一周歲 ;當 Allen Wirfs-Brock 在 TC39 組建茶歇聯盟並合縱連橫反對 ES4 時,我還在上初中。回顧自己小時候照片的同時,聯想一下彼時的 JavaScript 發展到了什麼程度,實在是一件很有趣的事情。
作為譯者,我有幸邀請到了前端社區的許多知名人士為本書撰寫推薦語,其中不僅有年過花甲的 Douglas 老先生,也有出生在 21 世紀的“小朋友”。這些來自不同時代、具有不同背景的人們,因為互聯網和 JavaScript 而產生了互動和聯系,這也讓我感受到了行業的發展和傳承。我堅信,能用 JavaScript 實現的東西還有很多,回顧歷史,會讓我們能更好地面向未來。
感謝稿定科技提供的寬松的工作環境,使我有條件利用業餘時間完成本書的翻譯工作。
感謝博文視點的張春雨老師對紙質版圖書項目的悉心策劃,以及編輯張爽的耐心校訂。
最後特別感謝我的妻子林瑾瑜,她的陪伴和鼓勵使我能愉快地完成這項工作。
——王譯鋒(雪碧)
2021 年 4 月
中文版序
語言是人類的核心,是定義人類社區的主要因素。當 Tim Berners-Lee 定義萬維網技術時,他實現了人類從未擁有過的東西,即一個可能覆蓋了世界上所有人的社區。萬維網的基礎是一組人造的語言 :HTML、CSS 和 JavaScript。正是這些語言,使人們能夠編織和分享 Web 的內容。
自然語言產生於許多世紀以前,並以冰川形成般的速度緩慢發展,我們幾乎不會注意到它們所發生的變化。而人造的計算機語言在這方面則有所不同,它們通常由個人發明,且其快速進化的過程是由同一個人或其他個別人所指導的。Web 編程語言的進化,則是由各種國際人員組成的技術委員會中不斷變化的成員的共識所推動的。由於人們的參與,因此這不只是一項技術進程,也是一項社會進程。
本書講述了 JavaScript 編程語言的創建及其前 20 年的演化故事。這個故事並不僅僅是關於一項技術的,也是關於塑造這項技術的人和組織的。Brendan Eich 和我都希望,它能展示關於 JavaScript 起步的權威歷史。
參與這個故事的個人、組織和國際委員一般會用英語交流和記錄他們的工作,這使得不精通英語的萬維網社區成員很難獨立理解和研究 JavaScript 的歷史。我很高興地得知王譯鋒將我們的工作內容翻譯成了中文版本。我希望這能讓中國的 Web 開發者有機會更好地了解這項重要的技術,這或許能激勵一些人積極地參與到 JavaScript 下一階段的發展中來。
Allen Wirfs-Brock
美國俄勒岡州舍伍德 2020 年 10 月
前言
2020 年,萬維網已經無處不在。整個網絡上有超過 10 億個網站,它們都可以經由數十億個與其相連的設備來訪問。在所有設備上都運行著網絡瀏覽器一類的程序,用於處理和顯示這些網站的頁面,而這些頁面中的大部分嵌入或加載了用 JavaScript 編程語言所編寫的代碼。2020 年的 JavaScript 可能是世界上獲得最廣泛部署的編程語言。Stack Overflow 2018 年的調查顯示,JavaScript 已被 71.5% 的專業開發者使用,這使其成為了世界上使用最廣泛的編程語言。
本書主要講述了 JavaScript 從 1995 年到 2015 年之間的創建、設計和演變過程。但本書所介紹的並不僅僅是語言的技術細節,還有人們和組織是如何在競爭與合作中逐漸塑造出 JavaScript 語言的故事。JavaScript 主導了 2020 年的 Web 開發。
這個故事相當漫長而復雜。為了讓讀者更容易理解,本文主要分為 4 個部分,每個部分都涵蓋了 JavaScript 發展和演化的一個主要階段。在各部分之間會有一段簡短的插曲,其中介紹了當時的軟件開發者是如何看待和使用 JavaScript 的。
1995 年,Web 和 Web 瀏覽器還是新技術,當時 Netscape 公司曾主導過 Web 瀏覽器的開發。JavaScript 在 1995 年 5 月由該公司的 Brendan Eich 設計實現,他是本書的作者之一。
JavaScript 旨在成為一種簡單且易於使用的動態語言,其代碼片斷能被包含在網頁的定義之中。瀏覽器會在渲染頁面時解釋執行這些代碼片段,使頁面能動態定制其展示形式,並響應用戶交互。
第一部分“語言誕生”介紹的是 JavaScript 的誕生和早期演化。這部分介紹了 Netscape公司在開發第一個版本的 JavaScript 時相應的動機和設計取舍。由於名稱上的接近,JavaScript 經常被人們與 Java 編程語言相混淆,第一部分解釋了 JavaScript 語言的命名過程、兩種語言在設想中的聯系,以及實際所發生的情況。對於這種語言最初的特性,
以及這些特性背後的設計決策,本部分也進行了概述。第一部分還追溯了 JavaScript 誕生後的最初幾年在 Netscape 和其他公司的早期演化過程。
Web 的基石之一,就是它所基於的非專有的開放技術 。任何人都能創建一個網頁,將其托管在來自不同廠商的各式 Web 服務器上,使其供不同瀏覽器訪問。一份通用的規範有利於保證各個獨立實現之間的互操作性。在 JavaScript 誕生之初,人們就意識到它需要某種形式的標準規範。僅在該語言發布的第一年,Web 開發者就已經遇到了 Netscape 的 JavaScript 與微軟的逆向工程實現之間的互操作性問題。1996 年,JavaScript 的標準化進程在 Ecma 國際標準化組織的主持下啟動。1997 年,Ecma 以“ECMAScript”的名義發布了該語言的第一份正式標準規範。到 1999 年年底,Ecma 又發布了兩份修訂版和增強版規範,它們主要基於 Netscape 對 JavaScript 的改動。
第二部分“創建標準”探討了 JavaScript 的標準化工作。包括標準化進程是如何啟動的、規範是如何創建的、誰為這項工作做出了貢獻,以及如何做決策。
到 2000 年,JavaScript 在 Web 上獲得了廣泛的應用。但此時 Netscape 公司正迅速衰落,Eich 也已轉戰其他項目。要由誰來引領 JavaScript 未來的進化呢?由於缺少企業或個人形式的“終身仁慈獨裁者” 2 ,因此演化 JavaScript 的責任就落在了 ECMAScript 標準委員會的身上。職責的交接並不順利,在長達十年的時間裡,ECMAScript 標準委員會試圖找到自己的語言發展道路。委員會在這期間經歷了錯誤的開始、標準化進程的中斷,以及在錯誤方向上的投入。與此同時,JavaScript 的實際使用量正迅速增長,用戶通常會使用實現所提供的特殊語言進行擴展。這導致出現了大量依賴 JavaScript 但又未受維護的網頁,並暴露了新的互操作性問題。Web 開發者開始創建復雜的客戶端 JavaScript Web 應用,這也需要標準化的新增語言特性來支持。
第三部分“改革失敗”講述了修訂語言時的失敗嘗試、標準委員會內部的動蕩,以及這種動蕩最終是如何解決的。
2008 年,標準委員會恢復了正常運作,著手制定一份適度加強後的標準版本,這版標準於 2009 年發布。有了這一成功經驗,標準委員會終於能承擔起在保持兼容的基礎上推進 JavaScript 語言現代化的任務了。在歷時 7 年的過程中,委員會大幅提高了語言規範性,其成果被稱為 ECMAScript 2015。這是 JavaScript 持續發展的基礎。在完成 2015 年的發布後,委員會再次修改了流程,以便實現更快的增量發布,現在每年都會定期完成修訂。
第四部分“繼往開來”講述了在創建 2009 版和 2015 版 ECMAScript 標準時所涉及的人員和流程。本部分涵蓋了這兩個版本的目標,以及它們是如何滿足 JavaScript 社區不斷演化的需求的。這一部分介紹了每個版本中對語言做出的重大基礎性改變,以及為語言添加的重要的新特性。
本書中的原始材料力求使用當時的原始文件。幸運的是,這類文件現存甚多。本書作者確保只通過參考資料中的網址即可自由而方便地在網上查閱幾乎所有的原始文件。原始文件中還補充了一些直接參與故事的人們的訪談和交流內容。兩位作者都是本書所涉及的許多事件的重要參與者,他們的回憶與第三方信息提供者的回憶均以類似的方式
進行了處理。
JavaScript 二十年來的完整故事很長,本書也是如此。其中涉及數百項不同的事件,以及幾十個組織和個人。附錄 A ~附錄 E 可以幫助讀者了解這些細節。附錄 A 和附錄 B提供了帶有注釋的人員名單,以及故事中所出現的組織。附錄 C 是一份術語詞匯表,其中定義的術語要麼為 JavaScript 所特有,要麼可能與 2020 年的計算機業界常見用法不同,
要麼含義可能發生變化,或對讀者來說顯得陌生。本書中首次使用的英文術語詞匯通常使用加粗斜體字。附錄 D 列出了讀者會遇到的縮略語。附錄 E 包含 4 份詳細的事件時間表,對應本書的 4 個部分。
名稱、數字與縮略語
JavaScript 的世界可能是一個混亂的地方,其中看似相同的東西卻往往有多種名稱。當進一步進入標準化組織的世界時,這種情況就更加嚴重了。這些組織通常使用兩三個字母的縮寫和數字來標識他們的組織單位和工作產品。為了最大限度地減少這種混亂,我們將對這些名稱和縮略語進行定義,並指定一些本書將遵循的約定。
“JavaScript”是一種編程語言的通用名稱。它最初是由 Netscape 公司開發的用於網頁的語言。但無論是在 Web 上還是在其他環境中,它的用途都已遠遠超出了這個範圍。每天都有數以百萬計的程序員來思考和談論這種語言。JavaScript 編程語言與 Java 編程語言截然不同,在技術上也有很大的區別,但它們相似的名稱卻經常引起人們的混淆。
JavaScript ® 也是一個注冊商標,最初由 Sun 公司注冊。截至本書出版之日,此商標由 Oracle 公司持有。這個商標由 Sun 公司授權給了 Netscape 公司,後來又授權給了Mozilla 基金會。Netscape 和 Mozilla 使用諸如“JavaScript 1.4”這樣的名稱來描述其開發的語言實現的特定版本。一些語言的實現者為了避免可能出現的商標問題,會選擇
使用其他名稱。由於 JavaScript 的多種名稱問題、商標問題及其易與 Java 混淆,許多現代用戶、圖書作者和工具實現者都將這種語言簡稱為“JS”。另外,“js”則是常用的 JavaScript 源代碼的文件擴展名。在本書中,當我們寬泛地談論這種語言及其在特定版本、宿主環境或語言實現之外的用法時,使用“JavaScript”這個不加限定的術語。
在為語言制定標準規範時,“JavaScript ”一詞是被規避的。作為替代,規範中使用了“ECMAScript”這一名稱。“JavaScript”和“ECMAScript”這兩個名字在本質上是同一事物的不同名稱。在本書中,當我們使用“ECMAScript”一詞時,是指專門討論由標準所定義的語言。
ECMAScript 名稱中的“ECMA”部分來源於 Ecma 國際,這是一個總部設在瑞士的標準化組織。ECMAScript 標準就是在該組織的主持下制定的。“ECMA”最初是“歐洲計算機制造商協會”的首字母縮寫,其最初的名稱後來演變為 Ecma 國際。Ecma 國際組織已不再認為“ECMA”是一個縮寫,目前只將“Ecma”中的“E”大寫。但在過去的不同時期,
他們曾使用過將所有字母大寫的名稱,在 ECMAScript 開發初期就是如此。這也是語言名稱以 5 個大寫字母開頭的原因。在本書中,當提到 Ecma 國際標準組織時,我們通常會使用“Ecma”這個詞。
Ecma 開發了許多與計算機產業有關的標準。制定標準的實際工作由 Ecma 技術委員會(Tech Committee)負責,該委員會簡稱“TC”。當一個新的 Ecma TC 被創建時,會給它分配一個序列號作為唯一標識。TC39 就是為了標準化 JavaScript 而創建的 TC。一些Ecma TC 又被細分為不同的任務組(Task Group),縮寫為“TG”,它們具備特定的職責。
從 2000 年到 2007 年,TC39 的職責擴大,覆蓋到了除 JavaScript 之外的其他編程語言。
在此期間,維護 ECMAScript 的職責被分配給了 TC39-TG1。在本書中,我們使用“TG1”作為 TC39-TG1 的縮寫。
Ecma 會為其 TC 撰寫的每份不同的標準各分配一個編號,並為這些編號添加“ECMA-”前綴作為代號。ECMAScript 標準即被指定為“ECMA-262”。當一份標準被修訂時,新版本會以相同編號後接一個版本號的形式來發布。例如,ECMAScript 標準第 3 個版本的正式名稱是“ECMA-262 第 3 版”。在 TC39 內部以及範圍更大的 JavaScript 社區內,
也出現了使用類似“ES3”形式的縮寫作為官方版本名稱縮寫的慣例。這裡的“ES”代表“ECMAScript”。下表列出了 1997—2016 年 ECMA-262 的各個版本及其在本書中所使用的縮寫。
人們定義第 4 版標準的嘗試歷時近十年,其中主要包括兩輪大體上互相獨立的設計工作。
在本書中,術語“初版 ES4”和“新版 ES4”被用來特指其中的某一種1 ;而“ES4”則用在描述對創建第 4 版標準整體投入的語境中。
自第 6 版標準發布起,TC39 采用了以標準出版年份作為縮寫的約定。因此,“ES6”和“ES2015”都是“ECMA-262 第 6 版”的非正式縮寫。人們一般更傾向於使用“ES2015”,但“ES6”仍是第 6 版標準制定過程中最常用的縮寫。TC39 成員還使用“Harmony”和“ES.next”作為第 6 版開發項目的代號。
本書使用了大量的行內代碼片段來說明 JavaScript 中的概念。其中的一些代碼段只對JavaScript/ECMAScript 的特定版本有效,其他代碼段則描述了一些不屬於該語言的特性。
對於那些無法在所有版本的 JavaScript/ECMAScript 中可用的代碼段,本書中都加入了適當的標注。
注意事項
英文原書中包含附錄 A~ 附錄 Q。其中,附錄 F 是標志著 JavaScript 正式誕生的公告,而附錄 G ~附錄 Q 則主要包括 JavaScript 演化過程中的文獻記錄,如會議紀要、提案示例、郵件列表記錄、規範節選等。由於附錄 G ~ 附錄 Q 的性質更接近參考文獻,故本書中並未包含此部分,有需要的讀者可以在博文視點社區的本書頁面中自行下載並查閱。
形如 Mosaic 的 加粗斜體英文詞匯,可在附錄 C 中找到相應的解釋。
形如[1]的為參考文獻,全書參考文獻較多且絕大部分為超鏈接,因此將其作為本書附贈的電子資源提供給讀者,以便於讀者查閱,請讀者在博文視點社區的本書頁面中下載。
目次
第 1 篇 語言誕生
第 1 章 史前時代 ..................................................................................3
1.1 Brendan Eich 加入網景 ........................................................................4
1.2 Mocha 的故事 ......................................................................................5
第 2 章 JavaScript 1.0 與 1.1................................................................8
2.1 JavaScript 語法 ..................................................................................10
2.2 數據類型與表達式 .............................................................................11
2.3 物件 ...................................................................................................14
2.4 函數物件 ............................................................................................17
2.5 內置庫 ...............................................................................................18
2.6 執行模型 ............................................................................................20
2.7 迷惑行為與 bug .................................................................................22
2.7.1 冗餘聲明 ...............................................................................22
2.7.2 隱式類型轉換與 = = 運算符 ..................................................23
2.7.3 32 位算術 ..............................................................................23
2.7.4 this 關鍵字.............................................................................24
2.7.5 arguments 物件 ......................................................................24
2.7.6 對數值屬性鍵的特殊處理 .....................................................25
2.7.7 原始值的屬性 ........................................................................26
2.7.8 JavaScript 中的 HTML 注釋 ..................................................26
xxiv | JavaScript二十年
第 3 章 微軟 JScript ...........................................................................28
第 4 章 從 Mocha 到 SpiderMonkey ....................................................30
第 5 章 插曲 :風評被害 ......................................................................35
第 2 篇 創立標準
第 6 章 尋找場地 ................................................................................39
第 7 章 首次 TC39 會議 ......................................................................41
第 8 章 編寫規範 ................................................................................45
第 9 章 命名標準 ................................................................................50
第 10 章 ISO 快速通道 .......................................................................52
第 11 章 定義 ECMAScript 3 ..............................................................53
第 12 章 插曲 :JavaScript 不需要 Java ..............................................63
12.1 布道師 .............................................................................................63
12.2 富互聯網應用與 AJAX ....................................................................64
12.3 瀏覽器博弈論 ..................................................................................67
第 3 篇 改革失敗
第 13 章 不滿於成功 ...........................................................................71
第 14 章 對 ES4 的第一輪嘗試 ............................................................72
第 15 章 另一條死路 ...........................................................................78
第 16 章 Flash 與 ActionScript ...........................................................80
目錄 | xxv
第 17 章 對 ES4 的第二輪嘗試 ............................................................82
17.1 重置 TC39-TG1 ...............................................................................82
17.2 重新設計 ES4 ..................................................................................83
17.3 阻力 .................................................................................................87
17.4 尋求和諧 ..........................................................................................93
第 18 章 插曲 :認真對待 JavaScript ................................................. 100
18.1 JavaScript 性能革命 .......................................................................100
18.2 CommonJS 和 Node.js ...................................................................101
18.3 成為瀏覽器通用運行時的 JavaScript.............................................103
第 4 篇 繼往開來
第 19 章 開發 ES3.1/ES5 ................................................................. 109
19.1 ES5 技術設計 ................................................................................114
19.1.1 嚴格模式 ...........................................................................114
19.1.2 Getter、Setter 和物件元操作 .............................................116
19.1.3 物件的完整性與安全性特性 ..............................................122
19.1.4 活動物件(Activation Object)的移除 .............................125
19.1.5 其他 ES5 特性 ...................................................................126
19.2 實現與測試 ....................................................................................127
第 20 章 從 Harmony 到 ECMAScript 2015 ....................................... 130
20.1 開始投入 Harmony ........................................................................130
20.1.1 稻草人(Strawman)與目標 .............................................130
20.1.2 倡導者模型 ........................................................................132
20.1.3 選擇特性集 ........................................................................132
20.1.4 開始編寫規範 ....................................................................133
20.1.5 One JavaScript ...................................................................134
20.1.6 Brendan 的夢想 .................................................................135
20.2 重新打造規範 ................................................................................138
20.2.1 重組規範結構 ....................................................................139
20.2.2 新的術語 ...........................................................................140
20.2.3 新的語義種類 ....................................................................141
20.3 ES2015 語言特性 ...........................................................................142
20.3.1 Realms、Jobs、Proxies 和元物件編程(MOP) ................142
xxvi | JavaScript二十年
20.3.2 塊級聲明作用域 ................................................................147
20.3.3 類 .......................................................................................151
20.3.4 模塊 ...................................................................................156
20.3.5 箭頭函數 ...........................................................................159
20.3.6 其他特性 ...........................................................................161
20.3.7 延期和被放棄的特性 .........................................................162
20.4 Harmony 轉譯器 ............................................................................162
20.5 完成 ECMAScript 2015 .................................................................163
第 21 章 總結 ................................................................................... 166
致謝 ................................................................................................... 168
附錄 A 登場人物 ............................................................................... 170
附錄 B 登場組織 ............................................................................... 175
附錄 C 術語表 .................................................................................. 177
附錄 D 縮略語和首字母縮寫詞 .......................................................... 182
附錄 E 時間線 .................................................................................. 184
附錄 F 1995 年 12 月 4 日的 JavaScript 公告 ..................................... 200
主題書展
更多書展購物須知
大陸出版品因裝訂品質及貨運條件與台灣出版品落差甚大,除封面破損、內頁脫落等較嚴重的狀態,其餘商品將正常出貨。
特別提醒:部分書籍附贈之內容(如音頻mp3或影片dvd等)已無實體光碟提供,需以QR CODE 連結至當地網站註冊“並通過驗證程序”,方可下載使用。
無現貨庫存之簡體書,將向海外調貨:
海外有庫存之書籍,等候約45個工作天;
海外無庫存之書籍,平均作業時間約60個工作天,然不保證確定可調到貨,尚請見諒。
為了保護您的權益,「三民網路書店」提供會員七日商品鑑賞期(收到商品為起始日)。
若要辦理退貨,請在商品鑑賞期內寄回,且商品必須是全新狀態與完整包裝(商品、附件、發票、隨貨贈品等)否則恕不接受退貨。

