generated at
ES2015
ES5 ← ES2015 (ES6) → ES2016

2015/06に公開されたECMAScriptのバージョン
ES6という別名があるが、このバージョンから ES<公開年> というフォーマットが用いられるようになった

新機能
クラス構文
シンタックスシュガー
unicodeサポートの強化
>subclassable built-ins
> ES6ではArray、Date、DOM Elementsのような組み込み関数を継承できます。
> オブジェクト生成時にCtorという関数が呼ばれ、以下の処理を行います。
> ...
> math + number + string + array + object APIs
> Mathライブラリ、配列変換、文字列操作、Object.assignなど多くのライブラリが追加されました。
> ...
> binary and octal literals
> 数値リテラルに2進数表記bと8進数表記oが追加されました。
> ...
> reflect api
> ...
> tail calls
> 末尾再帰を最適化します。
補足: それ以前からPromiseを実現するライブラリがあった
jQueryにも搭載されていた
乱立を取りまとめるためthenableという標準が生まれ
多くのライブラリのPromiseはthenableに準拠することになった
そしてPromiseを扱うツールを本体の言語機能に追加した
そこでライブラリによるPromiseとの互換性を維持するためthenableにも対応した
JSらしさを感じる
promise以前のコールバック地獄時代のコードをもう二度と考えたくないbsahd
オブジェクトはes2018から

主に使えない構文・オブジェクト
新機能がここまであるのに使えないのを書くのはネガティブでは...bsahd
ES2015までしか使えない環境で生のJavaScript書く場合は、使えない構文も考慮しないといけないMijinko_SD
オブジェクトに対するスプレッド構文
...obj みたいなやつ
これが対応したのはES2018から
オブジェクトをバラバラに展開するのがだるくなる
Promiseは使えるので、これを使って頑張るしかない
generatorを使って擬似的に代替することもできる
async/awaitに慣れた人はこの形式で我慢できる
async_generator.js
function* generatorFunction() { const result1 = yield Promise.resolve(1); console.log(result1); const result2 = yield Promise.resolve(2); console.log(result2); return 'Done'; } function runGenerator(generator,...args) { const gen = generator(...args); function handle(result) { if (result.done) return Promise.resolve(result.value); return Promise.resolve(result.value).then( res => handle(gen.next(res)), err => handle(gen.throw(err)) ); } return handle(gen.next()); } // minifyed // function runGenerator(e){const r=e();return function n(e){return e.done?Promise.resolve(e.value):Promise.resolve(e.value).then(e=>n(r.next(e)),e=>n(r.throw(e)))}(r.next())} runGenerator(generatorFunction).then(result => console.log(result));