《探索ES6》書評與作者采訪
由Axel Rauschmayer編著的 《探索 ES6 》 是對JavaScript最新特性的一次深入探討,本文包含了對作者所進行的一次簡短的訪談內容。
Axel Rauschmayer博士 的著作 《探索ES6:升級至JavaScript的下一個版本》 (Exploring ES6: Upgrade to the next version of JavaScript)是ECMAScript 2015中新引入特性的一份全面指南,讀者還可以參考配套的 代碼示例 。作者假設讀者已經熟悉JavaScript的特性,或是能夠通過閱讀他的另一本著作 《Speaking JavaScript》 很快地上手,后者對于ES5及之前的語言特性進行了深入的講解。
《探索ES6 》 一書首先對于JavaScript的歷史進行了簡單的回顧,包括它的版本變遷、標準化組織、設計過程、以及這門語言當下的目標:讓JavaScript成為一門更優秀的語言、具有更強的互操作性,同時又保持對之前版本的兼容。作者注意到了這一點:ECMA組織最終決定讓JavaScript保持完整的向后兼容性,以避免“破壞web”,他們要求與之相關者保持繼續運行舊版本的代碼的能力,并保證新引入的特性不會與之前的代碼產生沖突。本書接下來的部分著重強調了將ES6代碼轉譯(即編譯)為ES5代碼的一系列重要工具,包括包管理、模塊管理、lint工具、shim、polyfill、解析器和REPL等等。
在關于一致性方面的介紹之后,Rauschmayer開始進入ES6的新特性,他首先對這些新特性進行了簡短的描述,并列舉了示例代碼,然后對它們進行了深入的探討。在某些地方也會解釋一下為什么ECMA會決定以這種方式設計這門語言。其中的某些特性,例如類與模塊已經由各種類庫提供了對應的功能,但其它的一些特性都是全新的,包括promise、生成器(generator)或代理(proxy)。以下是作者在本書中所涵蓋的一些特性(尚有部分內容并未列舉在下表中):
- 數據 :數值、Math方法、新的string方法、模板字符串、符號(symbol)、范圍(scoping)、解構(destructuring)
- 模塊化: 箭頭函數(arrow function)、類、模塊
- 集合: 新的數組特性、Map、Set、生成器
- 其它特性: 異步編程、Unicode、代理
本書的末尾部分提供了大量的 代碼風格提示 :例如何時使用常量、let或箭頭函數,避免混用默認導出(export)與命名導出、格式化生成器、以及推薦使用類等等。
我們對作者進行了一次采訪,以了解他在相關主題方面的看法。
InfoQ : ES5如今已經在主流的JavaScript平臺上得到了完整的實現,但目前還沒有任何平臺能夠完整地實現所有的ES6特性,并且在每個平臺上已實現的特性可能各不相同。如果說還沒有一個特性已經得到所有主流平臺的支持,web開發者們又該如何編寫ES6代碼呢?你對此有什么建議?
AR : 首個完全支持ECMAScript 6的JavaScript引擎恐怕要到2016年才會出現,在那之前,唯一合理的方式就是將ES6編譯為ES5再部署編譯后的代碼。等到了2016年之后,你就可以檢查一下每個引擎的情況,看它是否已經支持了ES6(或者只檢查一下你所使用的那部分特性)。對于已經支持的特性,可以在代碼中加載原生的版本,否則依然要使用編譯后的ES5版本。
InfoQ : 根據之前ES5的采用情況來看,你認為主流瀏覽器大概需要多久才能夠完整地實現ES6?是一年、兩年還是五年?
AR : 這一點真的很難說,因為我不清楚微軟與蘋果公司的日程計劃。在 status.modern.ie 網站上,微軟仍然將某些核心特性列為“考慮中”,而蘋果則依然保持一貫的神秘感。但Mozilla與Google在這方面進展良好,大概在2015年末或2016年初就會完全支持ES6了。
InfoQ : 你對于One JavaScript這種思想有什么看法?對于web的發展來說,這種方式是否比強制版本化的做法更好?至少后者承諾能夠帶來更整潔的語言。
AR : David Herman將ES6避免版本化問題的做法稱為“One JavaScript”。大體上說,它表示ES6是ES5的一個超集,也就是說ES6是100%向后兼容的,這也避免了將JavaScript分割為 ES5(及更早版本)和ES6(及之后的版本)兩個陣營。這種方式保持了JavaScript引擎的簡單性,將ES5代碼庫遷移到ES6也變得十分簡單,因為它其實就是ES6的一個有效子集。One JavaScript方式唯一的缺點就是限制了你對這門語言進行清理的機會:你永遠無法移除特性,只能添加新的特性。
InfoQ : 有沒有哪些特性是你希望出現,卻尚未包括在ES6中的,或者說有哪些特性是你希望以另一種方式進行標準化的呢?
AR : ES6本身已經非常豐富了。雖然我可能會稍微改變一下類的實現,但能夠在ES6中看到它已經很欣慰了。從長遠一點的觀點來看,我希望看到特質(trait)(或mixin)的出現,并希望標準庫中的內容能夠更豐富一些(尤其是關于迭代操作的工具方法)。
InfoQ : 本書中的某些章節還沒有完成,你是否已計劃好它們的完成時間了呢?
AR:我已經完成了我認為最重要的所有章節,我會盡量在接下來幾個月中完成剩余的章節。
《探索ES6》的在線版本 包括免費的HTML版本,以及對應某個推薦價格的PDF、ePub或MOBI格式的電子書。
ES6剛剛由ECMA國際投票通過,可以在 《ECMAScript 2015正式發布》 這篇帖子中找到關于此事的更多細節。
查看英文原文: Exploring ES6: Book Introduction and Author Interview