node.js支持哪个版本的Javascript

时间:2011-02-28 07:18:49

标签: javascript node.js v8

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

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

我哪里错了?是否有某个文档详细说明了可用的语言功能?

4 个答案:

答案 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。更糟糕的是,这似乎是故意的。