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