我开始使用Node.js并且我很难弄清楚节点支持哪个版本的JavaScript,这使得我很难弄清楚我可以使用哪些功能。这就是我所知道的。
鉴于此,我认为我可以在节点中使用JavaScript 1.5兼容代码。然而,事实证明我可以使用Array.forEach
以及其他结构,即使根据MDC它直到Javascript 1.6 - ECMA-262,第5版才可用。
我哪里错了?是否有某个文档详细说明了可用的语言功能?
答案 0 :(得分:33)
This matrix(V8紧跟WebKit专栏)似乎很好地回答了“我可以使用哪些功能?”的问题。但是我找不到“支持哪个版本的javascript?”的规范答案。据我所知,最佳答案是:支持ECMA-262第3版,但也支持第5版的许多功能。
有一个很好的解释,为什么V8遵循this thread上的WebKit和JavaScriptCore功能。
答案 1 :(得分:32)
Node javascript版本取决于Node使用的v8版本。节点版本0。0。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版稳定过渡。
答案 2 :(得分:14)
看起来,在某些时候,创建了node.green来跟踪针对不同Node版本的JavaScript功能支持。
答案 3 :(得分:1)
似乎我们已经简化为两种策略来确定哪个版本的Javascript节点使用:
策略1:信任某个文档所说的内容,在许多情况下这是错误的。我还没找到表,表明哪个版本的节点支持哪个版本的ECMAScript的键值对。
策略2:猜测和检查。
找到ES6和&#34引用的功能;看看它是否失败",如下所示:
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
我想&#34; babel&#34;这里是对塔纳克的参考。我们的节点版本支持哪些功能?好吧,我不知道,你必须手动测试它。这将成为一个巨大的MESS。更糟糕的是,这似乎是故意的。