BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース TC39はECMAScript 2019の機能セットを最終化した

TC39はECMAScript 2019の機能セットを最終化した

原文(投稿日:2019/03/18)へのリンク

ECMA TC39パネルは最近、JavaScriptのES2019エディション(ECMAScript 2019とも呼ばれる)の機能を最終化した。ES2019は、配列、オブジェクト、文字列、シンボル、try/catchブロック、JSONの新機能または更新された機能で改善される。

配列は2つの新しいメソッドやプロトタイプがある: flatMapflat。対応するTC39提案仕様ではArray.prototype.flat[ depth ]は、デフォルト1の「depthに指定された深さまで再帰的に全てのサブ配列要素を結合して新しい配列を返す。」例えば:

> ['a', ['b','c'], ['d']].flat()
["a", "b", "c", "d"]

> ['a', ['b',['c','e']], ['d']].flat()
["a", "b", ["c", "e"], "d"]

> ['a', ['b',['c','e']], ['d']].flat(2)
["a", "b", "c", "e", "d"]

> ['a', [], ['d']].flat()
["a", "d"]

Array.prototype.flatMapのT39提案は「マッピング機能を使って各要素をマッピングして、フラット化した結果を新しい配列にする。これは深さ1の平坦化と同じである」。例えば、以下のコードcondtrueの時に'a'のみが挿入される:

const cond = false;
const arr = flatten([
  (cond ? ['a'] : []),
  'b',
]);

ES2019はArray.prototype.sortは安定したソートである必要があると定義しており、つまり比較して同じだった場合は元の順序である必要がある):

> var items = [
  { name: 'John', value: 37 },
  { name: 'Edward', value: 21 },
  { name: 'Sharpe', value: 37 },
  { name: 'And', value: 45 },
  { name: 'The', value: -12 },
  { name: 'Magnetic', value: 13 },
  { name: 'Zeros', value: 37 }
];
> items.sort(function (a, b) {
  return a.value - b.value;
  });
0: {name: "The", value: -12}
1: {name: "Magnetic", value: 13}
2: {name: "Edward", value: 21}
3: {name: "John", value: 37}
4: {name: "Sharpe", value: 37}
5: {name: "Zeros", value: 37}
6: {name: "And", value: 45}

ES2019はObjectfromEntries静的メソッドを追加した。提案では、「Object.fromEntriesObject.entriesの逆を行うことが提案されている: それはキーと値のペアのイテレータブルを受け取り、自身とキーとそれらのペアによって与えられる対応する値を持つ新しいオブジェクトを返す」

obj = Object.fromEntries([['a', 0], ['b', 1]]); 
// { a: 0, b: 1 }

Object.fromEntriesはコンテキストにおいてオブジェクトの作成を単純化する。例えば:

arr = [ { name: 'Alice', age: 40 }, { name: 'Bob', age: 36 } ];
obj = Object.fromEntries(arr.map(({ name, age }) => [ name, age ]));
// {Alice: 40, Bob: 36}

map = new Map([ [ 'a', 1 ], [ 'b', 2 ], [ 'c', 3 ] ]);
obj = Object.fromEntries(map);
// {a: 1, b: 2, c: 3}

文字列の開始と終了にある空白を取り除くString.prototype.trimStartString.prototype.trimEndという2つの新しいメソッドが追加された:

> '  abc  '.trimStart()
"abc  "
> '  abc  '.trimEnd()
"  abc"

Symbol Description Accessorはsymbolの説明を取得するメソッドのSymbolプロトタイプを取得できる:

> const s = Symbol('The description');
> s.description
"The description"

ES2019ではバインディングが使用されない場合catchバインディングを省略できる:

try {
  // 実装されていないかもしれないweb機能を使ってみる
} catch (unused) {
  // より広くサポートされている望んでいないweb機能に切り替える
}

これを以下に書き換えれる:

try {
  // 実装されていないかもしれないweb機能を使ってみる
} catch {
  // より広くサポートされている望んでいないweb機能に切り替える
}

最後ににES2019はほぼ内部で使われている小さな変更が提供されている:

TC39はJavaScriptを進化させる委員会である。そのメンバーは企業(とりわけ主要なブラウザーベンダー)である。ECMAScript機能の提案は、以下の成熟ステージを経る:

  • Stage 0: アイディア(Strawman)
  • Stage 1: 提案(Proposal)
  • Stage 2: 草案(Draft)
  • Stage 3: 候補(Candidate)
  • Stage 4: 完了(Finished)

機能がStage 4に到達すると、その提案は標準に含まれ、安全に使用できる。ただし、ブラウザーのサポートは標準機能の採用よりも遅れる可能性がある。V8 v7.3 / Chrome 73以降、これらすべてのES2019機能がデフォルトとして提供されている

この記事に星をつける

おすすめ度
スタイル

BT