◆ Array#includes
◆ ** 

そろそろかなーと思ってたら公開されていました

公開されたからと言っても今年のはじめには どれが ES2016 に含まれるか確定してたわけですし 何があるということもないですけどね

ECMAScript 2016 の新機能

意外とたった 2 つだけです

includes

ひとつは Array のメソッド includes です
;[1,2,3].includes(1)
// true

;[1,2,3].includes("1")
// false

これまで
!!~[1,2,3].indexOf(1)
// true

と indexOf で -1 か判定やってたのが真偽値で返ってくるので 条件分岐がちょっと楽になります
indexOf と同じで型もみるので 1 と "1" は別物です

また indexOf と同じく 第二引数で開始位置を指定できます
;[1,2,3].includes(1, 2)
// false

String と同じく contains じゃなく includes です
DOM 関連は contains なのでややこしいですが仕方ないので諦めましょう
ECMA と w3c で作ってる団体が違うからかな?

自分で
Array.prototype.contains = Array.prototype.includes
String.prototype.contains = String.prototype.includes
とやっておけばどっちでも使えるので迷っても大丈夫

**

Exponentiation operator というそうです

他の言語ではあるものも多いですが N 乗するものです
Math.pow(2, 3)
// 8

2 ** 3
// 8

Math.pow(3, -4)
// 0.012345679012345678

3 ** -4
// 0.012345679012345678

Chrome 51 ではデスクトップ版はバグがあるので実装されてますが隠されています
--js-flags=--harmony-exponentiation-operator

このフラグを Chrome の起動時につけると動きます
Android では 51 から使えるようです

ECMAScript

せっかくなので ES のリリースまでの流れをまとめてみました
去年の ECMAScript 2015 からこれまでとは変わりました
名前もこれまでの ES3, ES4(なくなった), ES5, ES6 と順番に数字だったのが 2015 と年になりましたしね


正式名称は ECMAScript 2015 のようにリリース年が付いてる方
ちゃんとしたスペックの文章だとこうなってます


ES5
Standard ECMA-262
5.1 Edition / June 2011
ECMAScript® Language Specification

This is the HTML rendering of Ecma-262 Edition 5.1, The ECMAScript Language Specification.

ES6
Standard ECMA-262
6th Edition / June 2015
ECMAScript® 2015 Language Specification

This is the HTML rendering of ECMA-262 6th Edition, The ECMAScript 2015 Language Specification.

ES7
ECMA-262
7ᵗʰ Edition / June 2016
ECMAScript® 2016 Language Specification

This Ecma Standard defines the ECMAScript 2016 Language. It is the seventh edition of the ECMAScript Language Specification.

ES5 とか 6 は 5th Edition のようにエディションのことです
なので今後も 8, 9, 10 と増えていくはず

でもこれまでは 大きな機能や構文の追加があってから新しいバージョンになっていましたが 今後というか ES2015 からは毎年リリースになりました
タイミングは今年と同じ流れで 1 月末頃に締め切りがあってそのタイミングで完了してる機能が 6 月に文書化されて正式リリースです

6 月には ECMA という ECMAScript 作ってるところの General Assembly という会議があるので そこで最終承認されてからリリースになるようです
これまでからすると 会議のあとすぐみたいですね

来年は 6 月の 13, 14 日 (日本時間だと 1日後)らしいので来年も同じ頃に ECMAScript 2017 がリリースされるはずです


1 年ごとにリリースになりましたが 次の新機能や 提案されてる機能が正式な仕様に確定するまであとどれくらいかの目安は TC39 のリポジトリで確認できます

TC39 が ECMA の中で ECMAScript を担当してるところです
TC は technical committee の略

ここにある Stage が機能の提案 (Proposal) に対する完了までの進み具合です
0 から始まって 4 まであります
5 段階です

4 になれば完了なので来年の頭の ES2017 の締め切りまでに 4 になったら それは ES2017 の新機能ということです

0 は誰でも書ける「こんなの欲しいー」くらいなものなので 別ページにまとめられています

1,2,3 と進んで 3 までくれば仕様はもう完成していて ブラウザの実装待ちやテスト待ちだったりするので 使えるようになるものはほぼ決まってると言っても良いような段階なのでサンプルコード見て こんなの入るんだー と眺めてると良いと思います
1 や 2 だとまだ仕様が変わったり なくなったりの可能性もあるので 使えるようになったら良いなーくらいの気分で眺めてるのがいいかもしれません

最終の 4 になるには 2 つの実装でテストに通る必要があるようです
たいてい Firefox と Chrome だと思うのでこのブラウザの新機能の実装の進み具合を見てると良さそうです
4 になったのは完了済みとしてまた別のページにまとめられています

0 ~ 4 のそれぞれがどんな意味かの詳しくはここ
英文が多いです
日本語版も探せば誰かが公開してると思います


あと ここに TC39 の会議のメモが置いてるようです
英語が辛いので私は読むの諦めましたが JavaScript の新しい情報を仕入れたい人には役立ちそうです


CSS も CSS3 から似た感じでモジュール単位で仕様決めて勧告ってことになってますし 機能ごとにリリースしていってくれたほうがいっき増えるよりは使う方も楽です
一度覚えたら数年は新しいことしなくていい方が良いって人には辛いですけどね