JS.next

JavaScriptの最新実装情報を追うブログ

正規表現にdotAllフラグが追加された

概要 正規表現でドット「.」を改行文字にもマッチさせることができるようになった。

try-catch構文で例外を受け取る変数の指定を省略できるようになった

概要 try { } catch( err ) { }の( err )の部分を省略することができるようになった。

正規表現の名前付きキャプチャが実装された

概要 正規表現内の好きな部分に名前を付け、その名前を使ってマッチ結果を参照できるようになった。

Promise.prototype.finallyが実装された

概要 プロミスの成功・失敗に関わらず継続して処理を行うためのPromise.prototype.finallyメソッドが実装された

Spread/Restプロパティが実装された

概要 配列のSpread/Rest構文のように、オブジェクト内に別のオブジェクトを展開する構文が実装された。

関数パラメータの末尾カンマが実装された

概要 関数を定義する際、パラメータの末尾にカンマを付けてもよいことになった。

Object.getOwnPropertyDescriptorsが実装された

概要 対象のオブジェクトがもつ全てのPropertyDescriptorsを得られる関数が実装された。

async関数が実装された

概要 非同期な処理を同期的に書ける関数タイプが実装された。

明示的な末尾呼び出し最適化構文が実装された

概要 ES2015で特定の形で関数呼び出しがされている場合に末尾呼び出し最適化が行われるよう定められたが、 パフォーマンスや、デバッグなどの実装上の問題が浮上したため、それを解決するための新たな構文がV8で実装されたが、その後廃止された

ユニコード文字プロパティについて

概要 正規表現でひらがなにマッチさせる場合によく「 /[ぁ-ん]/ 」とするが、これを「 \p 」エスケープ表現を使って、 「 /\p{Block=Hiragana}/u 」のように分かりやすく書けるようにするための新たな仕様がV8で実装された。

Function#nameについて

概要 ES2015からは名前の無い関数定義であっても、コンテキストによって関数のnameプロパティが定義されるようになった。

String.prototype.pad{Start,End}が実装された

概要 対象の文字列の先頭や終わりに、指定した長さになるように、指定した文字列を繰り返して埋めるメソッドが実装された。

べき乗演算子が実装された

概要 Math.pow関数の代わりに新しい演算子「 ** 」でべき乗の演算ができるようになった。

@@hasInstanceが実装された

概要 インスタンスであるか判定するためのビルトインシンボルが実装された。

function.sentメタプロパティが実装された

概要 ジェネレータ内で直近に送られた値を返すfunction.sentメタプロパティが実装された。

末尾呼び出し最適化が実装された

概要 ある関数Aから別の関数Bを呼び出すとき、処理系は後で戻って来れるように一旦Aの状態を保存し、関数Bの処理に入る。 これが問題になるのは再帰の時で、数万回程度の再帰でスタックが一杯になり、エラーとなってしまう。 しかし、もし関数B呼び出しの際…

Object.{values,entries}が実装された

概要 オブジェクトの全ての列挙可能なプロパティの文字列キーの配列を返すObject.keys関数に似た、 値の配列を返すObject.valuesと、キーと値のペアの配列を返すObject.entries関数が実装された。

@@speciesが実装された

概要 クラスの種族を設定するためのビルトインシンボルが実装された。

Proxyについて

概要 Proxyを使うとオブジェクトに対する様々な操作に割り込み、好きな振る舞いをさせることが出来る。

正規表現の後読みが実装された

概要 後読みは「何かが直前に来る目標」を指す際に便利な表現である。

正規表現系のシンボルが実装された

概要 ES2015以前は正規表現オブジェクトを引数で取る関数は一般に、内部で引数が正規表現オブジェクトであるかどうかの判定をして、独自の処理をしていたが、 ES2015からは代わりに各処理に合うシンボルプロパティを持っているかどうかの判定をし、そのシン…

do式が実装された

概要 ブロック文のようでありながら、かつ中に書かれた最後の式の評価を返すdo式が実装された。

SharedArrayBufferとAtomics APIについて

概要 JSで大きな処理を効率良く捌きたい時、今までもWorker等でスレッド立てて処理を分割する事はできたが、 スレッド間のやり取りの方法は制限されたものしかなく、バッファを共有することもできなかった。 そこで新しく導入されたSharedArrayBufferを用い…

@@toPrimitiveが実装された

概要 オブジェクトがプリミティブ型に変換される際に、どんな処理を行いどんな値を返すか決めるためのビルトインシンボルが実装された。

デフォルト引数が実装された

概要 引数が渡されなかった際のデフォルト値の設定が可能になった。

SIMD型について

概要 新しいプリミティブ型であるSIMD型及びAPIがV8で実装されてきている。 SIMDとは、複数の数値を並べて1つの値としたようなデータ型である。 これはCPUによって効率良くサポートされているデータ型であり、 1 + 2 -> 3 をするように [ 1, 2, 3, 4 ] + [ …

Spread要素が実装された

概要 配列リテラルでSpread要素を使うと、イテラブルとして展開してそれぞれを要素にしてくれる。

分割代入が実装された

概要 分割代入を用いると、複数の代入を1つにまとめることが出来る。

Object.assignが実装された

概要 Object.assignはオブジェクト同士をマージするJSerの誰もが長年追い求めた夢のメソッドである。

Array.prototype.copyWithinが実装された

概要 copyWithinは配列の一部の区間を任意の位置から貼り付ける破壊的メソッドである。