io.js 的 ES6

io.js 建構於目前版本的 V8 之上,將會持續更新並引入最新的引擎版本,以確保最新的 JavaScript ECMA-262 specification 特性能以最短的時間內被 io.js 的開發人員所使用,並藉著不斷快速更新此持續改善效能及穩定度。

目前釋出的 io.js v3.3.1 版本已採用 V8 4.4.63.30,其支援的 ES6 特性遠超過 joyent/node@0.12.x 所使用的 V8 3.26.23 。

不再需要 --harmony 參數

在 joyent/node@0.12.x (V8 3.26) 上,參數 --harmony 將會一次啟用所有處於完成(completed)、**階段性(staged)程序中(in progress)**狀態之下的 ES6 特性支援(除了 proxies ,此特性在使用參數 --harmony-proxies 時會被隱藏)。這意味著一些臭蟲或是很有問題的特性像是 Arrow Functions ,可能將會很容易的被開發人員所誤用在專案中,就如同沒有問題的特性 generators 一般。因此,大多數的開發人員通常會代入一些參數,只啟動特定的 harmony 特性支援(如:--harmony-generators),或是直接啟用所有的特性支援,然後在開發時限定只使用特定某些穩定的功能。

不過在使用 io.js@1.x (V8 4.1+) 之後,前面所提到的所有麻煩將不再是問題。現在所有的 harmony 特性都將會被分類到不同的群組中,分別為 shippingstagedin progress

什麼樣的 ES6 特性將被 io.js 預設支援?(不需要代入任何參數)

你可以參閱更多的細節,以及比較其他的 JavaScript 引擎,在 compat-table 專案網頁。

什麼樣的 ES6 特性需要代入 --es_staging 參數?

我過去已經大量使用了 --harmony 參數,我該移除它嗎?

目前 --harmony 在 io.js 的行為,只會啟用 staged 的特性,與 --es_staging 參數相同。如前面所提及,這些都是些尚未被視為穩定的特性,如果你想要更安全的使用 io.js ,尤其特別是在已上線的服務或產品上使用,請考慮移除並停止使用此參數,直到這些特性被 V8 所預設支援,接著被 io.js 所支援。假設你仍然持續使用這個參數,你可能要有因為升級 io.js 而導致程式壞掉的心理準備,尤其是如果 V8 為了更接近標準而修改語法,就會出現這樣的問題。

我如何得知 io.js 正在使用的 V8 版本?

io.js 提供了一個非常簡單的方法去取得所有的依賴函式庫及版本號,只要透過存取 process 全域物件即可。所以,如果想知道 V8 引擎的版本資訊,可以直接在終端機(Terminal)上輸入:

iojs -p process.versions.v8