2011-02-28 217 views
60

我開始使用Node.js,並且很難弄清楚哪個版本的JavaScript受節點支持,這使得難以弄清楚我可以使用哪些功能使用。這是我所知道的。Node.js支持哪些版本的Javascript

  • Node使用V8
  • V8在ECMA-262,第三版指定執行的ECMAScript
  • ECMA - 262,第三版是JavaScript 1.5

考慮到這一點,我會承擔我可以使用節點中的JavaScript 1.5兼容代碼。然而,事實證明我可以使用Array.forEach以及其他構造,儘管根據MDC它不可用,直到Javascript 1.6 - ECMA-262,第5版。

我哪裏錯了?是否有文檔詳述可用的語言功能?

+0

對於2015年更新,請參見[Node.js 0.12中提供的ECMAScript 6功能](http://stackoverflow.com/questions/28388885/ecmascript-6-features-available-in-node-js-0-12 )。 – 2015-08-01 01:14:52

+0

而一個05.2016更新,根據[文檔的NodeJS(https://nodejs.org/en/docs/es6/),它們遵循[JavaScript的ECMA-262規範,第6版](HTTP://www.ecma- international.org/publications/standards/Ecma-262.htm)和「所有ECMAScript 2015(ES6)功能分爲三組,用於發貨,上演和正在進行的功能」 – 2016-05-18 09:15:30

回答

29

This matrix(V8緊跟WebKit專欄)似乎很好地回答了「我可以使用哪些功能?」這個問題。但是我找不到「JavaScript支持哪個版本」的規範答案?據我所知,最好的答案是這樣的:支持ECMA-262第3版,但第5版的許多功能也被支持。

對於爲什麼V8遵循this thread上的WebKit和JavaScriptCore功能有個很好的解釋。

30

節點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列爲實施第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的changelog,在2011年6月15日第8版改爲版本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版本的穩定過渡。

+0

好吧,儘管V8正在切換到第5版沒有證據表明Node完全在0.5.1+版本中完全遵守它。我的0.6.12不支持Object.prototype.getOwnPropertyNames()儘管它在ECMA262-5th 15.2.3.4的上市。 – soletan 2012-08-19 10:50:22

+1

必須解決我之前的評論,因爲上述方法是靜態的,而不是綁定到Object.protoype(確實包含在節點0.6.12中),因此沒有證據表明NodeJS不完全支持ECMA262-5th ... – soletan 2012-08-22 22:34:37

1

這好像我們已經減少到兩種策略來找出哪些節點的Javascript的版本使用:

策略1:信任哪些文件的地方說,這是錯誤在許多情況下。我還沒有找到表格,指出哪個版本的節點支持哪個版本的ECMAScript的鍵值對。

策略2:猜測和檢查。

查找ES6報價,「看它是否失敗」的一個例子,是這樣的:

[email protected]:~/code$ echo "console.log('blue'.includes('blue'))" > a.js 
[email protected]:~/code$ cat a.js 
console.log('blue'.includes('blue')) 
[email protected]:~/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 
[email protected]:~/code$ babel-node a.js 
true 

我想的「巴別塔」在這裏是對塔納赫參考。我們的節點版本支持哪些功能?那麼,我不知道,你必須手動測試它。這將成爲一個巨大的MESS。更糟糕的是,這似乎是故意的。

5

的樣子,在某些時候,node.green創建以跟蹤不同節點版本的JavaScript功能的支持。

相關問題