ECMAScript 2015 (ES6) in Node.js(譯)
Node.js是建立在V8引擎的基礎上。通過保持對該引擎最新發布版的更新,我們可以確保能夠將JavaScript ECMA-262 specification 中的新特性能夠及時的提供給Node.js開發者們,就像我們藉助該引擎保持性能和穩定性的持續改進一樣。
所有ECMAScript2015(ES6)特性被分爲 shipping, staged和in progress三個部分:
- shipping特性是V8認爲已經穩定的特性,Node.js默認提供這些特性,而不需要額外的運行時標誌位來開啓。
- Staged特性,是V8團隊認爲已經幾乎完成但還不夠穩定的特性,需要用運行時標誌位:
--es_staging
(或者它的同義詞,--harmony
)來開啓這些特性。 - In progress特性可以分別通過它們各自harmony標誌位來開啓(例如:
--harmony_destructuring
),但是強烈不建議使用它們,除非只是出於測試的目的。
有哪些特性在Node.js中是默認開啓的(不需要設置運行時標誌位)?
- 塊級作用域(中文參考:let和const命令)
- Classes(需開啓嚴格模式,中文參考:Class)
- 集合類型(中文參考:Set和Map數據結構)
- Typed Arrays(中文參考:TypedArray視圖)
- Generator函數(中文參考:Generator函數)
- 二進制和八進制表示法(中文參考:二進制和八進制表示法)
- 對象字面量增強(中文參考:對象的擴展)
- Promises對象(中文參考:Promise對象)
- 字符串的擴展(中文參考:字符串的擴展)
- Symbols(中文參考:Symbol)
- 模版字符串(中文參考:模版字符串)
- 箭頭函數(中文參考:箭頭函數)
- new.target [2]
- Object.assign()(中文參考:Object.assign())
- 變量的解構賦值(中文參考:變量的解構賦值)
傻逼了,文章都還沒寫完,Node.js 6.0+就出來了!號稱覆蓋93%的ES6特性!這不是打我的臉嘛!
哪些特性還是在未完成狀態?
新的特性正在不斷地加入V8引擎。一般來說,雖然這些新特性未來在Node.js中落地的時間並不確定,但是我們依然可以抱有期待。
你可以通過--v8-options
參數在列出Node.js各個發行版中的進行中的特性。但需要注意的是,這些特性並沒有完成,並且有在未來被V8廢棄的風險,所以你需要自己承擔使用它們的風險。
node --v8-options | grep "in progress"
我現有的生產環境中已經使用了--harmony
標誌位,我應該移除它嗎?
--harmony
標誌位在當前版本的Node.js中已經成了過去式。在這之後,我們可以使用它的同義詞--es_staging
。如前所述,有一些已經完成的特性,還沒有被考慮爲stable狀態。如果你想安全地使用它們,特別是在生產環境中使用它們,最好等到V8和Nodejs將它們設置爲默認屬性後,並且可以不再使用運行時標誌位來開啓它們。如果你堅持開啓這個標誌位,你需要做好未來V8升級後會破壞你目前代碼的準備,因爲V8有可能改變這些特性的語義,而使它們更加接近標準。
我怎麼確定特定版本的Node.js使用的是哪一個版本的V8引擎?
Node.js提供了一個簡單的方法來列舉V8引擎的版本號:
node -p process.versions.v8