我正在学习Node.js,但是很难确定Node支持哪个版本的JavaScript,这使我很难确定可以使用哪些功能。以下是我的了解:
基于这些信息,我认为可以在Node中使用与JavaScript 1.5兼容的代码。但是,实际上我可以使用Array.forEach
等构造函数,尽管根据MDC文档,它直到JavaScript 1.6(即ECMA-262第5版)才被引入。
我错在哪里?是否有一份详细列出可用语言功能的文档?
我正在学习Node.js,但是很难确定Node支持哪个版本的JavaScript,这使我很难确定可以使用哪些功能。以下是我的了解:
基于这些信息,我认为可以在Node中使用与JavaScript 1.5兼容的代码。但是,实际上我可以使用Array.forEach
等构造函数,尽管根据MDC文档,它直到JavaScript 1.6(即ECMA-262第5版)才被引入。
我错在哪里?是否有一份详细列出可用语言功能的文档?
看起来,某个时候创建了node.green用于跟踪不同Node版本的JavaScript特性支持情况。
Node.js的Javascript版本取决于Node使用的v8版本。从Node版本0.5.1(2011年7月14日)开始,使用v8 3.4.10或更高版本,并采用第五版ECMA-262标准,而不是第三版。第五版等效于Javascript 1.8.5。原因如下。
2011年5月21日至6月15日期间,v8网站停止将v8标识为实现第三版ECMA-262标准,开始显示第五版。 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版本。此版本及以后的版本均采用第五版标准。
根据Node的变更日志,在Node版本0.5.1(2011年7月14日)中使用了v8 3.4.10版本,因此该版本及以后的版本均采用第五版ECMA-262标准。这并不意味着在3.4.10之前的v8版本完全采用第三版,因为可能有一个从第三版向第五版的平稳过渡。
es2015
(又名es6
)和es2016
之类的内容。node -p process.versions.v8
或通过 Node 文档 找到该特定 Node 中的 V8 版本。结果是当前 Node LTS(16.13.1)包括 V8 9.4,支持所有 ECMAScript 2022 功能。
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
我猜这里的“巴别塔”是指《旧约圣经》中的故事。我们的node版本支持哪些功能呢?嗯,我不知道,你需要手动测试一下。这将变得非常混乱。更糟糕的是,似乎是故意这样设计的。