2015-05-29 14 views
2

有像=>語法,Map物體看起來棒極了許多ES6的功能,和一個長等如何安全使用ES6的新功能?

說實話,我有點累檢查是否有針對的addEventListener由於IE8的attachEvent支持,和我不會喜歡這種痛苦迴歸我的生活。

那麼,你會如何處理這種新的可能性? (或者你會怎麼說,一年左右)。你會不會將它們用於基本操作,而是添加另一層額外的功能?您是否僅將它用於應用程序,您知道您將在支持它們的瀏覽器中運行它?你會等到至少有90%的支持嗎?

我知道這些都是很棒的功能,但對於短期到中期的使用情況,似乎您需要將代碼檢查和備用支持加倍。

對這個問題的任何啓發?

編輯:請不要標記爲重複。注意我不是在問如何檢查支持,我問是否明智地開始使用它,或者最好等待。我還問是否支持檢查是最好的選擇,不是如何去做,或者在設計代碼時是否有其他方法來進行過程。

+0

[如何特徵檢測es6模塊]可能的重複(http://stackoverflow.com/questions/27922232/how-to-feature-detect-es6-modules) – Anonymous

+2

https://babeljs.io/ –

+0

[我什麼時候可以在瀏覽器中使用ES6?](http://stackoverflow.com/q/13355486/1048572)和[使用ECMAScript 6](http://stackoverflow.com/q/24008366/1048572) – Bergi

回答

9

TL名單; DR:利用transpilerspolyfills


無論你是否應該使用新的功能,主要取決於你的目標環境,究竟如何你正在使用的新功能。例如。如果您只定位最新的瀏覽器版本,那麼您就不會遇到問題。必須支持IE8?這可能會更困難。

一般來說,你應該儘快開始使用新功能,並利用可以幫助你的工具。


有兩個方面看:

  • 新的API
  • 新語法構造

的API

新的API可以經常(但並不總是)是多填充。即您需要添加一個庫來檢查API的某些部分是否存在,例如Map,並提供一個替代實現,如果它沒有。

這些替代實現可能不是100%等同或可能不如本機實現的性能,但我會說他們對所有用例的95%工作。

關於polyfills的好處是,如果可用,您將自動使用本機瀏覽器實現。

語法

利用新的語法結構,如箭頭函數或類,是比較複雜的(但並不多)中的比特。最大的問題是,不支持語法的瀏覽器甚至無法評估您的代碼。您只能將代碼發送到實際可以解析的瀏覽器。

幸運的是,許多新的語法元素(如箭頭函數)實際上只是句法糖,因爲已經可以使用ES5。所以我們可以將轉換成 ES6代碼到他們的ES5甚至ES3中。

幾種這樣的工具,稱爲傳送者,已經出現在過去的一兩年。請注意,譯員必須在之前將其代碼轉換爲發送給瀏覽器。這意味着您不必簡單地編寫您的JS文件並直接將其包含在您的頁面中,您需要先建立一個構建步驟,以便先轉換代碼(就像我們在其他語言(如C或Java)中那樣)。

這與我們幾年前編寫JS的方式不同,但構建步驟已經越來越多地被JS社區所接受。也有許多構建工具儘可能使這個儘可能無痛。

與polyfills不同的是,如果它們變得可用,您將不會奇蹟般地使用本機特性。因此,您可能會長時間停留在運輸版本上,直到所有目標環境都支持您需要的所有功能。但是,這可能仍然比不使用新功能要好。

+0

非常非常清楚和有用的解釋!我很好奇:您是否已經使用這些功能?你能告訴我哪些? – Vandervals

+1

@Vandervals:主要是箭頭函數,生成器,迭代器和類。在過去的幾個月中,Babel確實將自己建立爲* transpiler以使用:https://babeljs.io/。我正在使用它的項目:https://github.com/fkling/JSNetworkX(儘管這個構建過程相當複雜)。 –

+0

因爲你太好了,我不會介意問:你有任何使用Java或其他基於類的語言的經驗,讓你跳躍更容易? (我問這個,因爲我沒有在你的個人資料中看到) – Vandervals

1

您可以使用BabelJSGoogle Traceur

您的構建過程中,包括了一步改造ES6,ES7代碼爲Javascript與今天的瀏覽器兼容。像gulpgrunt任務一樣。巴貝爾有支持的工具here

+0

你想解釋一下這個嗎? – Vandervals