はじめに
僕はブラウザ向けのJavaScriptを書くときは必ずBabelでトランスパイルしてるので、特に互換性は考えずJSの最新機能を使ってます。
でもCLIツールをNode.jsで書いたりする場合はランタイムが固定なので、Babeることなく「このバージョン以降のNode.jsでそのまんま動くように」なるべく書きたいのです。
The TC39 Processの性質上、「ES2018はNode v.XX以降でサポート」みたいな感じではなく、個別のProposalごとに実装されるタイミングが違います。
MDNの「ブラウザ実装状況」にはNode.jsも含まれていて、機能別に調べれば分かるんですが、「Node.jsのこのバージョンではどこまでの機能使えるんだっけ?」という確認をしたいケースが多かったので、一覧にまとめてみました!
一覧にまとまっているサイトを紹介します。
Node.js ES2015 Support
これを見れば万事解決。詳細な表にまとまってます。
https://node.green/
以下、読み飛ばし可
最初、上記サイトの存在を見つけられなくて「なんで誰もまとめてないの?なら俺がやってやる!」と思って、自分でES2016/2017/2018の新機能とMDNの対応ページを見比べながらポチポチまとめていたのでありますが、頑張って書き終えたあと、もう少しググったら見事に発見してしまって、完全に「車輪の再発明」というか「写真の再撮影」的な単なる劣化コピーをしていたことに気づいたわけでして・・・orz
ググってなぜこれにたどり着けなかったのかなぁ。。
せめて上記サイトにたどり着く日本人が増えることを祈ってあえて以下も残しつつこのエントリを投稿します。
はじめに
前略
ES2015は、import/export以外は「使えて当たり前」な感じなので、載せませんでした。
ES2018は未対応や「?」がまだ多かったり、ES2019以降もこのサイクルは続くので、随時更新していきたいと思ってます!
ES2016
機能 | 標準サポート | --harmonyでサポート | 備考 |
---|---|---|---|
Array#includes | 6.0.0 | 5.0.0 | |
べき乗演算子** |
7.0.0 | 6.5.0 |
ES2017
機能 | 標準サポート | --harmonyでサポート | 備考 |
---|---|---|---|
Object.values Object.entries |
7.0.0 | 6.5.0 | |
String#padStart String#padEnd |
8.0.0 | 7.0.0 | |
Object.getOwnPropertyDescriptors | 7.0.0 | 6.5.0 | |
関数の末尾のカンマ | 8.0.0 | ||
async / await | 7.6.0 | 7.0.0 | |
Atomics | 8.10.0 |
wake() は非標準名 |
ES2018
機能 | 標準サポート | --harmonyでサポート | 備考 |
---|---|---|---|
テンプレートリテラルのエスケープシーケンス見直し | × | 2018.10.28現在 | |
Promise#finally() | 10.0.0 | ||
Object リテラルでのスプレッド構文{ ...obj1, ...obj2 } |
8.3.0 | 8.0.0 | |
for await...of | ? | 9.2.0 --harmony-async-iteration |
|
正規表現の追加 | ? | lookbehind assertions(後読み)以外の情報は載ってない? |