Modern JavaScript, Google I/O, 2018-05。

  • ES6 moduleとwebページでの使い方。ファイルの拡張子は.mjsと区別できるようにしましょう
  • BitIntにChrome 67で対応
  • async / await
  • JavaScriptの正規表現で非対応だった「改行」のマッチで /.../s に対応 (やっと感高い)
    これまでは[\s\S][^] という「意味がわからない」正規表現を書かなければならなかった。node.jsでも使える。
  • 正規表現のキャプチャグループ (...) で後方参照できるが、キャプチャした文字列を変数に指定して積み込めるようになった。名前付き後方参照。node.jsでも使える。
  • 正規表現でUnicode文字クラス (Unicode Property Escape)の名前指定 \p{...} に対応。form inputの検証 (pattern属性)にも指定できる
  • 正規表現のグループ化したパターンだがマッチ結果に含まない look behind でマッチ (positive)と非マッチ (negative)に対応 : (?...)(?!...)
  • 正規表現のmatchAll(regex)は標準化中
  • 引数なしのcatch()ブロックに対応
  • 文字列の前後にある空白記号を削除する trim()。先頭だけのtrimStart(), 末尾だけのtrimEnd()もある。
  • Promiseのfinally()は正常処理とエラー処理のあと共通で呼び出されるため、コールバックのそれぞれの枝葉の最後に実行する共通の後処理を共通して記述できる
  • 配列への代入で最後の要素をまとめて1変数に指定できる: [ first, second, ...rest ]
    オブジェクトでも"spread"は使える。
  • オブジェクトのコピーはこれまで const destObj = Object.assign({}, sourceObj)としていたが、const destObj = { ...sourceObj }と書ける。
  • オブジェクトのマージはこれまで Object.assign({}, obj1, obj2)としていたが、{ ...obj1, ...obj2 }と書ける。
    配列とオブジェクトのスプレッド (spread)はnode.jsでも使える。
  • class内のプライベート変数は先頭に#を1文字をつける記述を標準化中

Microsoft Edgeはほとんどの項目に非対応なので、「Edgeはモダンではない」ことを徹底的に説明しつくす会、のようにも見える。