Fork me on GitHub

ECMAScript 2016 features & changes

Edit on GitHub 編集履歴を見る

ECMAScript 2016に新規追加される機能が50回目のEcma TC39ミーティングで確定しました。

Array.prototype.includes

ES6でArray.prototype.containsとして追加される予定でしたが、Break the webであったため延期されていた機能です。

Exponentiation Operator

x ** yMath.pow(x, y) と同じ機能です。

詳しくは既に幾つか記事が書かれているので以下を参照してください。

ES2016からは機能ごとのProposalを出し、承認されたらECMAScriptの仕様にマージするという形にプロセスが変わっています。

上記の追加された機能がマージされた仕様書のスナップショットが3月に、
最終的にEcma GAで承認されたら6月に正式なECMAScript 2016としてリリースされます。

以下にES2016のドラフト版などがリリースされているので、これを見るのが分かりやすいです。

ECMAScriptもWHATWGのHTMLのようにLiving Standardとなっているので、バージョン番号はスナップショット的な扱いです。

これまでのドラフト版を見ると追加された機能以外も仕様的には色々なアップデートが含まれていることが分かります。

変更された仕様

幾つか例をあげてみます。

Promise.allPromise.race@@speciesを無視するように

ES6ではPromise.resolve@@speciesを無視する変更は入ってましたが、allとraceについても同様の変更が入りました。

HostPromiseRejectionTrackerの抽象インタフェースが追加された

これはHostPromiseRejectionTrackerをHost環境(ブラウザなど)が実装していると、
PromiseでUnhandled Rejectionが起きた際に呼ぶという仕様です。

この仕様とWHATWG/htmlが連携し、'unhandledRejection''rejectionHandled'イベントの仕様が実装されています。
(具体的にユーザーが使うのはこっち)

GeneratorFunctionから[[Construct]]が取り除かれた

ES6ではGeneratorFunctionがnewできました。
しかし、ES2016では例外を投げるように変更されました。
([[Construct]]を持つ == newできる)

var g = { *g() {} }.g;
new g(); // ES6ではvalid、ES2016ではthrow error

Proxyの[[Enumerate]] trapの変更

まだ仕様に変更は入ってないですが、変更が予定されています。

このように、追加された機能以外も細かな変更などが行われています。
Breaking Changeですが、まだ利用してるケースも少ない(そもそも実装が少ない)ので早いうちに修正してるという印象です。

変更を知る方法

このような正式な変更はどこで知るのかを簡単にまとめてみます。
細かい修正以外の変更は、2ヶ月に1回開催されているTC39のミーティングで議論されてから追加されます。

情報の伝達が早い順で並べるとTwitter > GitHub > その他という感じです。

Twitter

TC39のミーティング中は、TC39メンバーのTwitterを見るのが早いです。

現在、Editorの@bterlsonさんと@rwaldronさんを見ておくといいかもしれません。

TC39 Meeting Notes

ミーティングの内容は後日GitHubに公開されます。

ミーティングノートが公開されたら、毎回自分は読書会をやっているので興味がある人は一緒に読みましょう。

GitHub

ECMAScriptの仕様はGitHubで管理されています。
そのため実際に入る変更はIssueやPull Requestを見ていれば分かります。

Proposalはそれぞれリポジトリがあるので、ミーティングがある時期に大体Issueなどが更新されています。

その他

その他公式ではないものとしてECMAScript周りについてよく扱うサイトとしては以下のようなものがあります。

自分は@EcmascriptDailyにECMAScript周りの情報を投げてますが、
興味がある人はフォローとかしてみるといいです。

Realtime JSer.infoのような感じで随時更新されます。

Contributing

自分自身はあんまり仕様の議論に参加しようという意欲はないですが、
ドキュメントは常に正しくあるべきという考えなのでその辺に対するコミットをしてます。

TC39 MTG Notes MTG | Doorkeeper後に毎回ミーティングノートの修正を送ったりしています。

tc39 meeting notes

また、ProposalがStage 3ぐらいになるとそのProposalのリポジトリがgithub.com/tc39に移管されます。
その時にURLがそのままだったりすることが多いので修正指摘して回るということをやったりしています。

こういうのは気づけば誰でもできると思うので、コントリビュートしやすいと思います。
ecma262test262もEditorialだったり小さな変更なら直接IssueやPull Requestできるので、その辺を見てみると面白いのかもしれません。

この記事へ修正リクエストをする
JSer.info Slackに参加する