1、简介
Node.js 是针对 V8 引擎构建的。通过与此引擎的最新版本保持同步,我们确保及时向 Node.js 开发人员提供 JavaScript ECMA-262 specification 中的新功能,以及持续的性能和稳定性改进。
所有的 ECMAScript 2015 (ES6) 功能将被分为三个部分 shipping,staged 和 in progress:
- 所有 shipping:在 V8 引擎中认为是稳定的,转变成 Node.js 默认,并且 不会 需要任何运行时标记。
- Staged:这些是将要完成的特性,并且在 V8 团队看来并不一定稳定,需要一个 --harmony 标记。
- In progress:这些特性可以通过各自单独的 harmony 标记被激活使用。除非为了测试用途,否则绝不鼓励这样做。值得注意的是这些标记是由 V8 引擎公开,将来或许会有潜在的变化而不会有任何免责声明或者协议。
2、默认情况下什么特性随着 Node.js 一起发布?
node.green (https://node.green/) 提供了非常完整、几乎涵盖了不同版本的 Node.js 中所支持的 ECMAScript 特性。它基于 kangax 的兼容性对照表构建。
kangax 用于检查JavaScript版本(ES5,ES6,ES2016 +等)在不同编译器,服务器/运行时和平台(桌面和移动)之间的兼容性。
3、有哪些特性在开发中?
新特性源源不断地被加入 V8 引擎。一般说来,虽然具体的时间未知,但我们总希望他们将来在 Node.js 中有所体现。
在每个 Node.js 发布版中,你可以通过 greep 配上 --v8-options 参数罗列出全部处于 in progress 状态的特性功能。请注意:他们尚未完成,可能因为 V8 引擎自带的功能而夭折。所以使用这些特性时会冒风险。
node --v8-options | grep "in progress"
4、移除这个标记(--harmony)吗
目前来说,--harmony 在 Node.js 的作用是让 staged 特性起作用。它本质上等同于 --es_staging。如上所述,有些特性尚未完全确认是稳定的,所以如果你希望一个安全的环境(尤其是在发布环境),你应该考虑移除这个运行时的环境标记,直到它在 V8 中以默认形式发布,或者在 Node.js 中落地。如果你开启了这个开关,你应该有对未来 Node.js 升级而造成代码破坏(无法正常工作)的准备,比如 V8 引擎做了更改,它的语法变得更接近标准。
5、Node.js 对应 V8 引擎
Node.js 提供了一个简单的方法以列出所有依赖项,以及通过 process 全局对象,借助特定的二进制包发布的不同版本。由于是 V8 引擎,在你的终端输入以下命令就可以获取相关版本号:
node -p process.versions.v8
例如我的node版本为v16.16.0,对应的v8引擎版本为:9.4.146.24-node.21