Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
node.js中支持哪个版本的Javascript_Javascript_Node.js_V8 - Fatal编程技术网

node.js中支持哪个版本的Javascript

node.js中支持哪个版本的Javascript,javascript,node.js,v8,Javascript,Node.js,V8,我刚开始使用Node.js,我很难弄清楚Node支持什么版本的JavaScript,这使得我很难弄清楚我可以使用什么功能。这是我所知道的 使用V8 按照ECMA-262第3版的规定实现ECMAScript ECMA-262,第三版 鉴于此,我假设可以在节点中使用JavaScript 1.5兼容代码。然而,事实证明,在其他构造中,我可以使用,即使根据MDC,它在JavaScript1.6--ECMA-262,第5版之前是不可用的 我哪里做错了?是否有详细说明可用语言功能的文档?(V8紧跟Web

我刚开始使用Node.js,我很难弄清楚Node支持什么版本的JavaScript,这使得我很难弄清楚我可以使用什么功能。这是我所知道的

  • 使用V8
  • 按照ECMA-262第3版的规定实现ECMAScript
  • ECMA-262,第三版
鉴于此,我假设可以在节点中使用JavaScript 1.5兼容代码。然而,事实证明,在其他构造中,我可以使用,即使根据MDC,它在JavaScript1.6--ECMA-262,第5版之前是不可用的

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

(V8紧跟WebKit专栏)似乎很好地回答了“我可以使用哪些功能?”的问题,但据我所知,我找不到“支持哪种版本的javascript”的标准答案,最好的答案是:支持ECMA-262第三版,但也支持第五版的许多功能


有一个很好的解释说明了为什么V8在上遵循WebKit和JavaScriptCore功能

节点javascript版本取决于该节点使用的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列为实现第三版ECMA-262,并开始显示第五版。 http://web.archive.org/web/20110615102350/http://code.google.com/p/v8/

根据v8更改日志,2011年6月15日,v8更改为3.4.4版。所以那个版本和更高版本是第五版


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

似乎我们已经简化为两种策略,以确定哪个版本的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
el@apollo:~/code$echo“console.log('blue')。包含('blue')”>a.js
el@apollo:~/code$cat a.js
console.log('blue')。包括('blue'))
el@apollo:~/code$node a.js
/home/el/code/javascript/02/a.js:1
端口,require,模块,_文件名,_目录名){console.log('blue')。includes('
^
TypeError:undefined不是函数
在对象上。(/home/el/code/javascript/02/a.js:1:82)
在模块处编译(Module.js:460:26)
在Object.Module.\u extensions..js(Module.js:478:10)
在Module.load(Module.js:355:32)
在Function.Module.\u加载(Module.js:310:12)
位于Function.Module.runMain(Module.js:501:10)
启动时(node.js:129:16)
在node.js:814:3
el@apollo:~/code$babel node a.js
真的

我想是“巴别塔”这里是对Tanakh的一个参考。我们版本的节点支持哪些功能?嗯,我不知道,你必须手动测试它。这将变得一团糟。更糟糕的是,它似乎是故意的。

看起来,在某种程度上,创建它是为了跟踪针对不同节点版本的JavaScript功能支持。

ugh V8正在切换到第5版。没有证据表明节点在版本0.5.1+中实际上完全符合它。我的0.6.12不支持Object.prototype.getOwnPropertyNames(),尽管它在ECMA262-5th 15.2.3.4中列出。必须修复我前面提到的注释方法是静态的,而不是绑定到Object.prototype(这确实包含在节点0.6.12中),因此没有证据表明NodeJ不完全支持ECMA262-5th…对于2015年的更新,请参见。和2016年5月的更新,根据,他们遵循和“所有ECMAScript 2015(ES6)功能分为三组,用于装运、阶段和进行中功能”ECMA-262是ECMAScript 5.1是Javascript 1.8.5,另请参阅(向下滚动至规范):2020更新:请参阅。