ES2015
ES6という別名があるが、このバージョンからES<公開年>というフォーマットが用いられるようになった 新機能
シンタックスシュガー
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を実現するライブラリがあった
多くのライブラリのPromiseはthenableに準拠することになった
そしてPromiseを扱うツールを本体の言語機能に追加した
そこでライブラリによるPromiseとの互換性を維持するためthenableにも対応した
JSらしさを感じる
promise以前のコールバック地獄時代のコードをもう二度と考えたくないbsahd.icon 主に使えない構文・オブジェクト
新機能がここまであるのに使えないのを書くのはネガティブでは...bsahd.icon
ES2015までしか使えない環境で生のJavaScript書く場合は、使えない構文も考慮しないといけないMijinko_SD.icon
...objみたいなやつ
オブジェクトをバラバラに展開するのがだるくなる
async/awaitに慣れた人はこの形式で我慢できる
code: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) {
const gen = generator();
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));