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


81

Node.jsを使い始めましたが、ノードでサポートされているJavaScriptのバージョンを理解するのに苦労しているため、使用できる機能を理解するのが困難です。これが私が知っていることです。

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

これを考えると、ノードでJavaScript1.5互換のコードを使用できると思います。ただし、Array.forEachMDCによると、Javascript 1.6 --ECMA-262、第5版まで使用できない場合でも、他の構成要素の中でも特にを使用できることがわかりました。

どこが間違っているのですか?利用可能な言語機能を詳しく説明しているドキュメントはどこかにありますか?


2015年の更新については、Node.js0.12で利用可能なECMAScript6の機能を参照してください。
ダンダスカレスク2015

そして、05.2016更新は、に従ってnodejsのドキュメント、彼らは従うJavaScriptのECMA-262の仕様を、第6版と「すべてのECMAScript 2015(ES6)の機能は、出荷のための3つのグループに分割され、段階的、そして進行中の機能」
ペタルDonchevマリノフは、

ECMA-262は、ECMAScriptの5.1である(仕様までスクロール)も参照、Javascriptの1.8.5です:developer.mozilla.org/nl/docs/Web/JavaScript/Reference/...
Codebeat

回答:


37

このマトリックス(V8はWebKit列にかなり密接に準拠しています)は、「どの機能を使用できますか?」という質問にかなりよく答えているようです。しかし、「どのバージョンのjavascriptがサポートされていますか?」に対する正規の答えが見つかりません。私の知る限り、最良の答えは次のとおりです。ECMA-262第3版がサポートされていますが、第5版の多くの機能もサポートされています。

V8がこのスレッドのWebKitおよびJavaScriptCore機能に従う理由についての良い説明があります


1
2020年の更新:NateWhittakerによる回答を参照してください。
rinogo

32

Node javascriptのバージョンは、Nodeが使用するv8のバージョンによって異なります。ノードバージョン0.5.1(2011年7月14日)以降はv8 3.4.10以降を使用し、第3版ではなく第5版ECMA-262です。第5版はJavascript1.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版です。

ノードの変更ログによると、v8 3.4.10はノードバージョン0.5.1、2011年7月14日であったため、バージョン以降は第5版ECMA-26です。これは、3.4.10より前のv8バージョンが純粋に第3版であったことを意味するものではありません。これは、多くのv8バージョンを通じて第3版から第5版への着実な移行があった可能性があるためです。


V8が第5版に切り替わっていたとしても、バージョン0.5.1以降でNodeが実際に完全に準拠しているという証拠はありません。私の0.6.12は、ECMA262-5th 15.2.3.4にリストされていますが、Object.prototype.getOwnPropertyNames()をサポートしていません。
ソレタン2012

1
上記の方法ではなく(実際にノード0.6.12に含まれている)ので、完全に... ECMA262-5thをサポートしていないNodeJSの証拠がないObject.protoypeに縛られるの静的の1があると私の以前のコメントを修正する必要があります
ソレタン2012


1

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になるでしょう。さらに悪いことに、それは意図的なもののようです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.