JavaScriptES2019の新機能

私たちの多くは、Javascriptの最新リリースには標準的な手順があり、その背後に委員会があることを知っています。この投稿では、新しい仕様の最終的な呼び出しを行うのは誰か、その手順は何か、ES2019の新機能について説明します。

JavaScriptを駆動する言語仕様は、ECMAScriptと呼ばれます。その背後には、採用する前にすべての仕様をレビューする技術委員会39 [TC39]と呼ばれるチームがあります

すべての変更は、成熟の段階を伴うプロセスを経ます。

  • ステージ0:アイデア/ストローマン
  • ステージ1:提案
  • ステージ2:ドラフト
  • ステージ3:候補者
  • ステージ4:終了/承認

ステージ4に到達する機能は、おそらく言語仕様の一部になります。

ES2019の仕様に新たに追加されたものを詳しく見ていきましょう。

Array.prototype。{flat、flatMap}

Array.prototype.flat()指定された範囲まで配列を再帰的にフラット化しdepth、新しい配列を返すことを提案しました。

構文Array.prototype.flat(depth)

深さ—デフォルト値1Infinityネストされたすべての配列をフラット化するために使用します。

const numbers = [1, 2, [3, 4, [5, 6]]]; // Considers default depth of 1 numbers.flat(); > [1, 2, 3, 4, [5, 6]] // With depth of 2 numbers.flat(2); > [1, 2, 3, 4, 5, 6] // Executes two flat operations numbers.flat().flat(); > [1, 2, 3, 4, 5, 6] // Flattens recursively until the array contains no nested arrays numbers.flat(Infinity) > [1, 2, 3, 4, 5, 6]

Array.prototype.flatMap()マッピング関数を使用して各要素をマッピングし、結果を新しい配列にフラット化します。これは、マップ操作の後flat1が続くのと同じですdepth

構文: Array.prototype.flatMap(callback)

コールバック:function新しい配列の要素を生成します

const numbers = [1, 2, 3]; numbers.map(x => [x * 2]); > [[2], [4], [6]] numbers.flatMap(x => [x * 2]); > [2, 4, 6]

Object.fromEntries

Object.fromEntriesの逆を実行しますObject.entries。キーと値のペアのリストをオブジェクトに変換します。

構文: Object.fromEntries(iterable)

iterable: iterableprotocolを実装するiterablelikeArrayまたはMaporオブジェクト

const records = [['name','Mathew'], ['age', 32]]; const obj = Object.fromEntries(records); > { name: 'Mathew', age: 32} Object.entries(obj); > [['name','Mathew'], ['age', 32]];

String.prototype。{trimStart、trimEnd}

trimStart()文字列の先頭から空白を削除し、文字列trimEnd()の末尾から空白を削除します。

const greeting = ` Hello Javascript! `; greeting.length; > 19 greeting = greeting.trimStart(); > 'Hello Javascript! ' greeting.length; > 18 greeting = 'Hello World! '; greeting.length; > 15 greeting = greeting.trimEnd(); > 'Hello World!' greeting.length; > 12

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

新しい仕様の前は、例外変数をcatch句にバインドする必要がありました。ES2019はそれをオプションにしました。

// Before try { ... } catch(error) { ... } // After try { ... } catch { ... }

この機能は、エラーを完全に無視したい場合に役立ちます。ベストプラクティスは、エラーの処理を検討することです。

操作でトリガーされる可能性のあるエラーを知っている場合があります。キャッチブロックの処理は無視してかまいません。

JSON⊂ECMAScript

行区切り文字(U + 2028)および段落区切り文字(U + 2029)記号が、文字列リテラルで使用できるようになりました。以前は、これらはラインターミネータとして扱われ、SyntaxError例外が発生していました。

// Produces invalid string before ES2019 eval('"\u2028"'); // Valid in ES2019 eval('"\u2028"');

整形式のJSON.stringify

ペアになっていないサロゲートコードポイントが単一のUTF-16コードユニットになる代わりに、ES10はそれらをJSONエスケープシーケンスで表します。

JSON.stringify('\uD800'); > '" "' JSON.stringify('\uD800'); > '"\\ud800"'

Function.prototype.toString

.toString() 空白やコメントを含む、ソースコードテキストの正確なスライスを返すようになりました。

function /* a comment */ foo () {} // Previously: foo.toString(); > 'function foo() {}' ^ no comment ^ no space // Now: foo.toString(); > 'function /* comment */ foo () {}'

Symbol.prototype.description

Symbolオブジェクトのオプションの説明を返す読み取り専用プロパティ:

Symbol('desc').toString(); > "Symbol(desc)" Symbol('desc').description; > "desc" Symbol('').description; > "" Symbol().description; > undefined

結論

TC39は、ここでのプロセスのステージ> 1にある今後のすべての仕様を保持します。開発者として、周りで何が起こっているかを把握することが重要です。クラス、Legacy RegE xなどの静的およびプライベートメソッドやフィールドのように、さらに多くのエキサイティングなものが登場します。ここで提案段階にあるすべての新しいものを見つけてください。

code = coffee + developer

さらに興味深いトピックがいくつかあります。

  • JavaScriptシンボルの概要
  • gitブランチ戦略を採用する方法
  • GitマージとGitリベースの概要:それらの機能と使用時期