Node.js 0.12 中提供的 ECMAScript 6 功能
Posted
技术标签:
【中文标题】Node.js 0.12 中提供的 ECMAScript 6 功能【英文标题】:ECMAScript 6 features available in Node.js 0.12 【发布时间】:2015-04-07 23:02:01 【问题描述】:Node.js (0.12) 的新稳定版本最近登陆了升级的 Google v8 javascript 引擎,v3.28.73。
目前 Node.js 中存在哪些 ECMAScript 6 功能,但未使用 --harmony
标志?
我检查了几个声称列出 ES 6 功能的网站,但它们似乎都已过时 - 最突出的是 this table(更新: 现在已更新为当前的 Node.js从 0.12 开始的状态),因为其中一些功能被列为需要--harmony
标志,而我发现其中一些功能默认启用(地图、集合、符号等)。 更新:Node specific tables 现已提供
此外,试图通过谷歌搜索此信息纯粹是为了 v8 引擎提供了最新的信息 - 当前的 v8 版本是 4.2.*,这远远领先于 Node.js 使用的版本。
我希望这个问题(及其答案)将成为对 Node.js 开发人员现在可用的 ES 6 功能的全面总结。
我目前知道的 Node.js 0.12 中启用的 ES 6 功能:
地图、集合 / 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【问题讨论】:
“我希望这个问题(及其答案)将成为关于 Node.js 开发人员现在可以使用哪些 ES 6 功能的全面总结。” - 机会是不是它只会变得杂乱无章……就像所有其他资源一样过时!除非您 1)自我回答和 2)花时间将其他答案整理到您的答案中。如果您准备好做这项工作,那么在博客中做可能更合适。 或者直接切换到io.js(它附带了一个更新的V8版本)并密切关注ES6 on io.js page。 精选 ES6 兼容性表:kangax.github.io/compat-table/es6 @JonathanLonowski 很有趣,奇怪的是我找不到关于节点 0.12 的问题/公关。 编辑:提交了issue。 @RobertRossmann - 任何人都可以拥有博客。我不怀疑你的目标。只是我认为这不会奏效......除非有人(即>>你>努力 【参考方案1】:不带--harmony
标志的功能:
我认为这就是没有--harmony
标志的所有内容。
带有--harmony
标志的功能:
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
标志后面)
我想就是这样。也许如果我忘记了什么 - 我稍后会将它添加到列表中。
【讨论】:
这正是我希望得到的答案——干净,并带有文档/示例的链接!在--harmony
标志下列出功能的额外积分。:)
字符串模板是否有--harmony
?如后面的勾号$varname
字符串语法?
@Sukima Node v0.12 不支持template strings,也没有--harmony
标志,也没有它。但是iojs
无需任何标志即可支持它们。
nodejs 是否在任何地方都记录了这一点?非常有用。
@JonRed 也许您的运行因其他原因而失败,而不是因为常数。我刚刚尝试过,我的跑步效果很好。【参考方案2】:
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 简单 - 兼容性表
动态生成的列表依赖于小测试来确认语言功能的存在,从而更好地保持最新状态。一个这样的流行列表是 kangax.github.io/compat-table/es6/。我们只对 Node 特性感兴趣,所以你可以使用
http://node.green
利用与 kangax 网站相同的数据。
#2 Hard - 回溯 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+beyond 功能。
【讨论】:
以上是关于Node.js 0.12 中提供的 ECMAScript 6 功能的主要内容,如果未能解决你的问题,请参考以下文章