node.js支持哪个版本的Javascript
我开始使用Node.js,并且很难弄清楚节点支持哪个版本的JavaScript,这使得很难搞清楚我可以使用哪些function。 这是我所知道的。
- 节点使用V8
- V8按照ECMA-262第3版的规定实现ECMAScript
- ECMA-262,第三版是JavaScript 1.5
鉴于此,我会假设我可以在节点中使用JavaScript 1.5兼容的代码。 然而,事实certificate我可以使用Array.forEach
,除了其他的构造,即使根据MDC它是不可用的,直到Javascript 1.6 – ECMA-262,第5版。
我哪里错了? 有没有文件详细说明可用的语言function?
这个matrix (V8紧跟在WebKit专栏之后)似乎很好地回答了“我可以使用什么function?”的问题。 但我无法find一个规范的答案“什么版本的JavaScript支持?” 据我所知,最好的答案是这样的:支持ECMA-262第三版,但第五版的许多function也被支持。
有一个很好的解释,为什么V8遵循这个线程的WebKit和JavaScriptCorefunction。
节点JavaScript版本取决于节点使用哪个版本的V8。 节点版本0.5.1(2011年7月14日)和向上使用v8 3.4.10或更高版本,并且是第5版ECMA-262,而不是第3版。 第五版相当于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版。
根据Node changelog,v8 3.4.10在2011年7月14日的Node Version 0.5.1中,所以版本及更高版本是第5版ECMA-26。 这并不意味着3.4.10之前的v8版本纯粹是第3版,因为从第3版到第5版可能会有很多v8版本。
看起来,在某种程度上, node.green是为跟踪不同Node版本的JavaScriptfunction支持而创build的。
似乎我们已经简化为两个策略来找出哪个版本的Javascript节点使用:
策略1:相信某个地方的某些文件说,这在许多情况下是错误的。 我还没有find表格,指出哪个版本的节点支持哪个版本的ECMAScript的键值对。
策略2:猜测和检查。
findES6引用的function,并“看看是否失败”,如下所示:
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
我想这里的“巴别尔”是对塔那克的提及。 我们的节点版本支持哪些function? 那么,我不知道,你将不得不手动testing它。 这将成为一个巨大的MESS。 更糟糕的是,这似乎是故意的。