Node.js 0.12 中可用的 ECMAScript 6 功能
ECMAScript 6 features available in Node.js 0.12
Node.js (0.12) 的新稳定版本最近发布,升级后的 Google 的 v8 JavaScript 引擎,v3.28.73.
在不使用 --harmony
标志的情况下,Node.js 当前存在哪些 ECMAScript 6 功能?
我检查了几个声称列出 ES 6 功能的站点,但它们似乎都已过时 - 最突出的是,this table (Update: now updated with current Node.js status as of 0.12), because several of the features are listed as requiring the --harmony
flag while I found some of them being enabled by default (Maps, Sets, Symbols, to name a few). Update: Node specific tables 已经可用
此外,尝试 google 此信息纯粹针对 v8 引擎提供了最新信息 - 当前 v8 版本是 4.2.*,这是远远领先于 Node.js 使用的内容。
我希望这个问题(及其答案)将成为 Node.js 开发人员现在可以使用的 ES 6 功能的全面总结。
在 Node.js 0.12 中启用的 ES 6 功能我目前知道:
- Maps, Sets / WeakMaps, WeakSets
- 符号
- Object.observe
- 承诺
- 数量
- .isInteger
- .isSafeInteger
- .isNaN
- .EPSILON
- .MIN_SAFE_INTEGER
- .MAX_SAFE_INTEGER
- 数学
- .clz32
- .imul
- .sign
- .log10
- .log2
- .log1p
- .expm1
- .cosh
- .sinh
- .tanh
- .acosh
- .asinh
- .atanh
- .trunc
- .fround
- .cbrt
- .hypot
没有 --harmony
标记的特征:
- "for-of" loop
- Map, Set, WeakMap, WeakSet(已在问题中指定)
- Symbol(问题中已经指定)
- Promise(已在问题中指定)
- 数组方法:
- 对象:
- .observe() (initially was planned for ES7, but was removed from the spec entirely 2015 年 11 月 2 日)
- .is()
- .setPrototypeOf()
- .getOwnPropertySymbols()
- .getNotifier()(不是 es6,示例 here)
- .apply() 和 .call() (不是 es6,与 Funciton.prototype.call 和 Function.prototype.apply 的目的相同)
- Number属性和方法(已在问题中指定)
- 数学方法(a lot of them)(已在问题中指定)
- constants
我认为这就是我们没有 --harmony
标志的全部内容。
具有 --harmony
标志的特征:
- generators
- arrow functions(与
io.js
相比不需要--harmony_arrow_functions
标志)
- let variables - 仅在
strict mode
- Binary and octal literals
字符串方法:
- .contains()(在实际的 ES6 规范中被
includes()
取代)
- .startsWith()
- .endsWith()
- .codePointAt()
- .repeat()
- .normalize()
- String.fromCodePoint
Proxy(在--harmony-proxies
标志后面)
我想就这些了。也许如果我忘记了什么 - 我稍后会把它添加到列表中。
ES6 特性分阶段渗透到 Node 中。 Node 使用 Google 的 V8 作为 JavaScript 引擎。 Node 中支持的功能意味着它首先必须在 V8 中实现,然后 Node 团队必须将其合并到 Node.js 中。
Google 的团队大约每六周发布一个新版本的 V8,然后由 Node 团队将其投入使用。
手动整理的语言功能列表很好,但很快就会过时。 Node 0.12 不再那么不断变化,但通常在新版本的 Node 推出后,手动策划的列表就会过时。
这里有两种替代方法来检查 Node 版本支持的功能,而不依赖于静态列表。如需进一步阅读和更详细的使用这些示例,您可以查看 "How to check if Node.js supports ES 6 language feature"
#1 简单 - 兼容性 table
一个动态生成的列表依赖于小测试来确认语言功能的存在更好地保持最新。一个这样的流行列表是 kangax.github.io/compat-table/es6/。我们只对 Node 特性感兴趣,所以你可以使用
利用与 kangax 站点相同的数据。
#2 困难 - 回溯 V8 版本
Node 使用 V8 引擎,因此确定 Node 中包含哪个版本的 V8 可以告诉我们支持哪些 ES6 语言功能。您可以使用 node -p process.versions.v8
查看 Node 中捆绑了哪个版本的 V8。
$ node -p process.versions.v8
4.6.85.31
然后使用 Google 的 V8 项目资源,您可以找到每个版本中实现的功能。 V8 项目保留了一个 issue tracker,您可以在其中找到标有 harmony 标签的 ES6+ 功能。
Node.js (0.12) 的新稳定版本最近发布,升级后的 Google 的 v8 JavaScript 引擎,v3.28.73.
在不使用 --harmony
标志的情况下,Node.js 当前存在哪些 ECMAScript 6 功能?
我检查了几个声称列出 ES 6 功能的站点,但它们似乎都已过时 - 最突出的是,this table (Update: now updated with current Node.js status as of 0.12), because several of the features are listed as requiring the --harmony
flag while I found some of them being enabled by default (Maps, Sets, Symbols, to name a few). Update: Node specific tables 已经可用
此外,尝试 google 此信息纯粹针对 v8 引擎提供了最新信息 - 当前 v8 版本是 4.2.*,这是远远领先于 Node.js 使用的内容。
我希望这个问题(及其答案)将成为 Node.js 开发人员现在可以使用的 ES 6 功能的全面总结。
在 Node.js 0.12 中启用的 ES 6 功能我目前知道:
- Maps, Sets / WeakMaps, WeakSets
- 符号
- Object.observe
- 承诺
- 数量
- .isInteger
- .isSafeInteger
- .isNaN
- .EPSILON
- .MIN_SAFE_INTEGER
- .MAX_SAFE_INTEGER
- 数学
- .clz32
- .imul
- .sign
- .log10
- .log2
- .log1p
- .expm1
- .cosh
- .sinh
- .tanh
- .acosh
- .asinh
- .atanh
- .trunc
- .fround
- .cbrt
- .hypot
没有 --harmony
标记的特征:
- "for-of" loop
- Map, Set, WeakMap, WeakSet(已在问题中指定)
- Symbol(问题中已经指定)
- Promise(已在问题中指定)
- 数组方法:
- 对象:
- .observe() (initially was planned for ES7, but was removed from the spec entirely 2015 年 11 月 2 日)
- .is()
- .setPrototypeOf()
- .getOwnPropertySymbols()
- .getNotifier()(不是 es6,示例 here)
- .apply() 和 .call() (不是 es6,与 Funciton.prototype.call 和 Function.prototype.apply 的目的相同)
- Number属性和方法(已在问题中指定)
- 数学方法(a lot of them)(已在问题中指定)
- constants
我认为这就是我们没有 --harmony
标志的全部内容。
具有 --harmony
标志的特征:
- generators
- arrow functions(与
io.js
相比不需要--harmony_arrow_functions
标志) - let variables - 仅在
strict mode
- Binary and octal literals
字符串方法:
- .contains()(在实际的 ES6 规范中被
includes()
取代) - .startsWith()
- .endsWith()
- .codePointAt()
- .repeat()
- .normalize()
- String.fromCodePoint
- .contains()(在实际的 ES6 规范中被
Proxy(在
--harmony-proxies
标志后面)
我想就这些了。也许如果我忘记了什么 - 我稍后会把它添加到列表中。
ES6 特性分阶段渗透到 Node 中。 Node 使用 Google 的 V8 作为 JavaScript 引擎。 Node 中支持的功能意味着它首先必须在 V8 中实现,然后 Node 团队必须将其合并到 Node.js 中。
Google 的团队大约每六周发布一个新版本的 V8,然后由 Node 团队将其投入使用。
手动整理的语言功能列表很好,但很快就会过时。 Node 0.12 不再那么不断变化,但通常在新版本的 Node 推出后,手动策划的列表就会过时。
这里有两种替代方法来检查 Node 版本支持的功能,而不依赖于静态列表。如需进一步阅读和更详细的使用这些示例,您可以查看 "How to check if Node.js supports ES 6 language feature"
#1 简单 - 兼容性 table
一个动态生成的列表依赖于小测试来确认语言功能的存在更好地保持最新。一个这样的流行列表是 kangax.github.io/compat-table/es6/。我们只对 Node 特性感兴趣,所以你可以使用
利用与 kangax 站点相同的数据。
#2 困难 - 回溯 V8 版本
Node 使用 V8 引擎,因此确定 Node 中包含哪个版本的 V8 可以告诉我们支持哪些 ES6 语言功能。您可以使用 node -p process.versions.v8
查看 Node 中捆绑了哪个版本的 V8。
$ node -p process.versions.v8
4.6.85.31
然后使用 Google 的 V8 项目资源,您可以找到每个版本中实现的功能。 V8 项目保留了一个 issue tracker,您可以在其中找到标有 harmony 标签的 ES6+ 功能。