由Axel Rauschmayer編著的《探索ES6》是對JavaScript最新特性的一次深刻探討,本文包含了對做者所進行的一次簡短的訪談內容。git
Axel Rauschmayer博士的著做《探索ES6:升級至JavaScript的下一個版本》(Exploring ES6: Upgrade to the next version of JavaScript)是ECMAScript 2015中新引入特性的一份全面指南,讀者還能夠參考配套的代碼示例。做者假設讀者已經熟悉JavaScript的特性,或是可以經過閱讀他的另外一本著做《Speaking JavaScript》很快地上手,後者對於ES5及以前的語言特性進行了深刻的講解。es6
《探索ES6》一書首先對於JavaScript的歷史進行了簡單的回顧,包括它的版本變遷、標準化組織、設計過程、以及這門語言當下的目標:讓JavaScript成爲一門更優秀的語言、具備更強的互操做性,同時又保持對以前版本的兼容。做者注意到了這一點:ECMA組織最終決定讓JavaScript保持完整的向後兼容性,以免「破壞web」,他們要求與之相關者保持繼續運行舊版本的代碼的能力,並保證新引入的特性不會與以前的代碼產生衝突。本書接下來的部分着重強調了將ES6代碼轉譯(即編譯)爲ES5代碼的一系列重要工具,包括包管理、模塊管理、lint工具、shim、polyfill、解析器和REPL等等。github
在關於一致性方面的介紹以後,Rauschmayer開始進入ES6的新特性,他首先對這些新特性進行了簡短的描述,並列舉了示例代碼,而後對它們進行了深刻的探討。在某些地方也會解釋一下爲何ECMA會決定以這種方式設計這門語言。其中的某些特性,例如類與模塊已經由各類類庫提供了對應的功能,但其它的一些特性都是全新的,包括promise、生成器(generator)或代理(proxy)。如下是做者在本書中所涵蓋的一些特性(尚有部份內容並未列舉在下表中):web
數據:數值、Math方法、新的string方法、模板字符串、符號(symbol)、範圍(scoping)、解構(destructuring)編程
模塊化:箭頭函數(arrow function)、類、模塊數組
集合:新的數組特性、Map、Set、生成器promise
其它特性:異步編程、Unicode、代理瀏覽器
本書的末尾部分提供了大量的代碼風格提示:例如什麼時候使用常量、let或箭頭函數,避免混用默認導出(export)與命名導出、格式化生成器、以及推薦使用類等等。ecmascript
咱們對做者進行了一次採訪,以瞭解他在相關主題方面的見解。異步
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
如下三篇博文對應於《探索ES6》一書中第24與25章:
[1] ECMAScript 6 promises(上):基本概念, http://my.oschina.net/1pei/blog/532924
[2] ECMAScript 6 promises(下):談談 API(一), http://my.oschina.net/1pei/blog/538090
[3] ECMAScript 6 promises(下):談談 API(二), http://my.oschina.net/1pei/blog/538609