ES2019ガイド

ECMAScriptは、JavaScriptのベースとなる標準であり、ESと略されることがよくあります。 ECMAScriptのすべてと、ES2019で追加された機能をご覧ください

ESNextは、JavaScriptの次のバージョンを常に示す名前です。

現在のECMAScriptバージョンはES2018. It was released in June 2018.

歴史的にJavaScriptエディションは夏の間標準化されてきたので、期待できますECMAScript 2019 to be released in summer 2019.

したがって、執筆時点で、ES2018がリリースされており、ESNextはES2019です

ECMAScript標準への提案は、段階的に編成されています。ステージ1〜3は新機能のインキュベーターであり、ステージ4に到達する機能は新しい標準の一部として完成します。

これを書いている時点で、私たちはいくつかの機能を持っていますStage 4。このセクションでそれらを紹介します。主要なブラウザの最新バージョンは、すでにそれらのほとんどを実装しているはずです。

  • Array.prototype.{flat,flatMap}
  • オプションのキャッチバインディング
  • Object.fromEntries()
  • String.prototype.{trimStart,trimEnd}
  • Symbol.prototype.description
  • JSONの改善
  • 整形式JSON.stringify()
  • Function.prototype.toString()

これらの変更の一部は主に内部使用のためのものですが、何が起こっているのかを知ることも良いことです。

ステージ3には他にも機能があり、今後数か月でステージ4に昇格する可能性があります。これらは、このGitHubリポジトリで確認できます。https://github.com/tc39/proposals

Array.prototype.{flat,flatMap}

flat()は、多次元配列から1次元配列を作成できる新しい配列インスタンスメソッドです。

例:

['Dog', ['Sheep', 'Wolf']].flat()
//[ 'Dog', 'Sheep', 'Wolf' ]

デフォルトでは、1レベルまでしか「フラット化」されませんが、配列をフラット化するレベル数を設定するパラメーターを追加できます。に設定しますInfinity無制限のレベルを持つために:

['Dog', ['Sheep', ['Wolf']]].flat()
//[ 'Dog', 'Sheep', [ 'Wolf' ] ]

['Dog', ['Sheep', ['Wolf']]].flat(2)
//[ 'Dog', 'Sheep', 'Wolf' ]

['Dog', ['Sheep', ['Wolf']]].flat(Infinity)
//[ 'Dog', 'Sheep', 'Wolf' ]

JavaScriptに精通している場合map()配列のメソッドを使用すると、配列のすべての要素で関数を実行できることがわかります。

flatMap()を組み合わせた新しい配列インスタンスメソッドですflat()map()。 map()コールバックで配列を返す関数を呼び出すときに便利ですが、結果の配列をフラットにする必要があります。

['My dog', 'is awesome'].map(words => words.split(' '))
//[ [ 'My', 'dog' ], [ 'is', 'awesome' ] ]

['My dog', 'is awesome'].flatMap(words => words.split(' '))
//[ 'My', 'dog', 'is', 'awesome' ]

オプションのキャッチバインディング

try / catchのcatchブロックにパラメーターをバインドする必要がない場合があります。

以前は次のことを行う必要がありました。

try {
  //...
} catch (e) {
  //handle error
}

使用する必要がなかったとしてもeエラーを分析します。これで、単純に省略できます。

try {
  //...
} catch {
  //handle error
}

Object.fromEntries()

オブジェクトにはentries()メソッド、以来ES2017

オブジェクト自身のすべてのプロパティを含む配列を、次の配列として返します。[key, value]ペア:

const person = { name: 'Fred', age: 87 }
Object.entries(person) // [['name', 'Fred'], ['age', 87]]

ES2019は新しいObject.fromEntries()このようなプロパティの配列から新しいオブジェクトを作成できるメソッド:

const person = { name: 'Fred', age: 87 }
const entries = Object.entries(person)
const newPerson = Object.fromEntries(entries)

person !== newPerson //true

String.prototype.{trimStart,trimEnd}

この機能は、ほぼ1年前からv8 / Chromeの一部であり、ES2019で標準化される予定です。

trimStart()

元の文字列の先頭から空白を削除した新しい文字列を返します

'Testing'.trimStart() //'Testing'
' Testing'.trimStart() //'Testing'
' Testing '.trimStart() //'Testing '
'Testing '.trimStart() //'Testing'

trimEnd()

元の文字列の末尾から空白を削除した新しい文字列を返します

'Testing'.trimEnd() //'Testing'
' Testing'.trimEnd() //' Testing'
' Testing '.trimEnd() //' Testing'
'Testing '.trimEnd() //'Testing'

Symbol.prototype.description

これで、の説明を取得できますシンボルそのにアクセスすることによってdescriptionを使用する代わりにプロパティtoString()方法:

const testSymbol = Symbol('Test')
testSymbol.description // 'Test'

JSONの改善

この変更の前は、行区切り文字(\ u2028)と段落区切り文字(\ u2029)の記号は、次のように解析された文字列では使用できませんでした。JSON

使用するJSON.parse()、これらの文字はSyntaxErrorしかし、JSON標準で定義されているように、正しく解析されるようになりました。

整形式JSON.stringify()

を修正しますJSON.stringify()代理UTF-8コードポイント(U + D800からU + DFFF)を処理するときに出力されます。

この変更の前にJSON.stringify()不正な形式のUnicode文字(「�」)を返します。

これで、これらの代理コードポイントは、を使用して文字列として安全に表すことができます。JSON.stringify()、を使用して元の表現に変換し直しますJSON.parse()

Function.prototype.toString()

関数には常にインスタンスメソッドがありますtoString()関数コードを含む文字列を返します。

ES2019では、コメントや空白などの他の文字が削除されないように戻り値が変更され、定義された関数を正確に表しています。

以前に持っていた場合:

function /* this is bar */ bar () {}

動作は次のとおりです。

bar.toString() //'function bar() {}

現在、新しい動作は次のとおりです。

bar.toString(); // 'function /* this is bar */ bar () {}'

私の無料ダウンロードJavaScriptビギナーズハンドブック


その他のjsチュートリアル: