JavaScript
Node.js

Node.jsのどのバージョンでES2015以降の各仕様が使えるか


はじめに

僕はブラウザ向けの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(後読み)以外の情報は載ってない?


参考リンク

ES2016 / ES2017で実装される機能まとめ

ES2018で追加される機能まとめ