web-dev-qa-db-ja.com

node.jsでサポートされているJavascriptのバージョン

私はNode.jsを使い始めており、ノードがサポートしているJavaScriptのバージョンを把握するのに苦労しており、使用できる機能を把握するのが難しくなっています。これが私が知っていることです。

  • ノード はV8を使用します
  • V8 ECMA-262、第3版で指定されているECMAScriptを実装
  • ECMA-262、第3版は JavaScript 1.5

これを考えると、ノードでJavaScript 1.5互換コードを使用できると思います。ただし、 Array.forEach 、MDCによると、Javascript 1.6-ECMA-262、第5版まで利用できませんが、他の構成要素の中では。

どこがおかしいの?利用可能な言語機能の詳細を記載したドキュメントはどこかにありますか?

72
emtrane

このマトリックス (V8はWebKitコラムにかなり近い)は、「どの機能を使用できますか?」という質問によく答えているようです。しかし、「サポートされているjavascriptのバージョンは?」に対する正規の答えが見つかりません。私の知る限り、最良の答えはこれです。ECMA-2623rdエディションはサポートされていますが、5thエディションの多くの機能もサポートされています。

V8が このスレッド でWebKitおよびJavaScriptCore機能を使用する理由については、十分な説明があります。

33
Benson

Node javascriptバージョンは、Nodeが使用するv8のバージョンによって異なります。Nodeバージョン0.5.1(2011年7月14日)以降はv8 3.4.10以降を使用し、第3版ではなく第5版ECMA-262です。第5版はJavascript 1.8.5と同等です。以下の理由を参照してください。

2011年5月21日から2011年6月15日までに、v8 Webサイトは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はNode Version 0.5.1、14 Jul 2011であったため、そのバージョン以降は第5版ECMA- 26.これは、多くのv8バージョンを通じて第3から第5に着実に移行している可能性があるため、3.4.10より前のv8バージョンが純粋に第3版であることを意味しません。

32
John Middlemas

ある時点で、異なるNodeバージョンに対してJavaScript機能のサポートを追跡するために node.green が作成されたように見えます。

14
Nate Whittaker

Javascriptノードのどのバージョンを使用するかを判断するために、2つの戦略に削減されたようです。

戦略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

ここの「バベル」はタナフ語への言及だと思います。ノードのバージョンはどの機能をサポートしていますか?よくわかりませんが、手動でテストする必要があります。これは巨大なMESSになるでしょう。さらに悪いことに、それは意図的に行われているようです。

1
Eric Leschinski