node.js支持什么版本的Javascript


81

我开始使用Node.js,并且很难确定节点支持哪种JavaScript版本,这使得很难确定可以使用哪些功能。这就是我所知道的。

鉴于此,我假设我可以在节点中使用JavaScript 1.5兼容代码。但是,事实证明,我可以使用Array.forEach,以及其他结构,即使根据MDC,它直到Javascript 1.6-ECMA-262,第5版才可用。

我要去哪里错了?是否有文件详细说明可用的语言功能?




ECMA-262是ECMAScript 5.1是Javascript 1.8.5,另请参阅(向下滚动至规格):developer.mozilla.org/nl/docs/Web/JavaScript/Reference/…–
Codebeat

Answers:


37

这个矩阵(V8紧随WebKit列)似乎很好地回答了“我可以使用哪些功能?”这个问题。但是我找不到“支持哪种版本的javascript?”的规范答案。据我所知,最好的答案是:支持ECMA-262第3版,但也支持第5版的许多功能。

关于V8为什么在此线程上遵循WebKit和JavaScriptCore功能有很好的解释。


1
2020年更新:请参阅Nate Whittaker答案
rinogo

32

Node的javascript版本取决于Node使用的v8版本。节点版本0.5.1(2011年7月14日)及更高版本使用v8 3.4.10或更高版本,并且是第5版ECMA-262,而不是第3版。第5版等效于Javascript 1.8.5。请参阅以下原因。

在2011年5月21日至2011年6月15日之间,v8网站停止将v8列为实施第3版ECMA-262,并开始显示第5版。 http://web.archive.org/web/20110521053630/http://code.google.com/p/v8/ http://web.archive.org/web/20110615102350/http://code.google。 com / p / v8 /

根据v8更新日志,2011年6月15日,v8更改为版本3.4.4。该版本及更高版本均为第5版。

根据节点变更日志,v8 3.4.10的版本为2011年7月14日的节点版本0.5.1,因此该版本及更高版本为第5版ECMA-26。但是,这并不意味着3.4.10之前的v8版本纯粹是第3版,因为可能已经通过许多v8版本从第3稳定过渡到第5。


好吧,即使V8切换到了第5版,也没有证据表明Node在0.5.1+版本中实际上完全遵守了它。我的0.6.12虽然在ECMA262-5th 15.2.3.4中列出,但不支持Object.prototype.getOwnPropertyNames()。
soletan 2012年

1
必须修复我以前的评论,因为提到的方法是静态的,而不是绑定到Object.protoype(确实包含在节点0.6.12中),因此没有证据表明NodeJS不完全支持ECMA262-5th ...
soletan 2012年


1

似乎我们已被简化为两种策略来找出使用哪个版本的Javascript节点:

策略1:信任某处某文件的内容,这在许多情况下是错误的。我尚未找到该表,该表指示哪个节点版本支持哪个ECMAScript版本的键值对。

策略2:猜测并检查。

找到ES6引用的功能,然后“查看是否失败”,如下所示:

el@apollo:~/code$ echo "console.log('blue'.includes('blue'))" > a.js
el@apollo:~/code$ cat a.js 
console.log('blue'.includes('blue'))
el@apollo:~/code$ node a.js
/home/el/code/javascript/02/a.js:1
ports, require, module, __filename, __dirname) { console.log('blue'.includes('
                                                                    ^
TypeError: undefined is not a function
    at Object.<anonymous> (/home/el/code/javascript/02/a.js:1:82)
    at Module._compile (module.js:460:26)
    at Object.Module._extensions..js (module.js:478:10)
    at Module.load (module.js:355:32)
    at Function.Module._load (module.js:310:12)
    at Function.Module.runMain (module.js:501:10)
    at startup (node.js:129:16)
    at node.js:814:3
el@apollo:~/code$ babel-node a.js
true

我想这里的“ Babel”是对塔纳赫语的引用。我们的节点版本支持哪些功能?好吧,我不知道,您将不得不手动对其进行测试。这将成为一个巨大的MESS。更糟糕的是,这似乎是故意的。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.