🎉喜大普奔、ES2019デビュー

わずか4時間前に、TC39はES2019に次の機能を追加しました。これらの新機能が私たちにもたらした変化を見てみましょう。

1548822100255.jpg

ES2019 新特性:

Array Array#{flat、flatMap}

➡️Object.fromEntries

➡️文字列#{trimStart、trimEnd}

➡️記号#の説明

➡️{} catch {} //オプションのバインディングを試す

➡️JSON⊂ECMAScript

➡整形式のJSON.stringify

➡️安定した配列#sort

➡変更された関数#toString

JSON⊂ECMAScript(JSONスーパーセット)

行区切り記号(U + 2028)およびセグメント区切り記号(U + 2029)シンボルは、文字列リテラル内のJSONと一致するようになりました。以前は、これらのシンボルは文字列リテラルでは行末記号として扱われていたため、それらを使用するとSyntaxError例外が発生していました。

整形式のJSON.stringify

よりわかりやすいJSON.stringify(範囲外のUnicode表示エラーに関する問題を修正しました。)

Unicodeフォーマットを入力したが範囲外の文字を入力した場合、元のJSON.stringifyは不正なUnicode文字列を返します。

JSON.stringify('\uD800');
// → '"�"'

今すぐ JSON.stringifyを変更するためのフェーズ3の提案を実装します/ a>なので、有効なUnicode(およびUTF-8で表現)にするためのエスケープシーケンスを出力します。

JSON.stringify('\uD800');
// → '"\\ud800"'
在 chrome 控制台输出的是 '"\ud800"' ,但只是一个显示值, 真实值为'"\\ud800"'。

JSON.stringify('\uD800') === '"\\ud800"';
// → true

安定した配列#sort

以前は、sort関数の10個以上の要素からなる配列V8は不安定なQuickSort(速い行です。今は安定したTimSortアルゴリズムを使います)を使いました。

TimSortアルゴリズム: ja.wikipedia.org/wiki/Timsor …

改訂関数#toString

Function.prototype.toString()が返されるようになりましたスペースやコメントを含む正確な文字オリジナルとの比較

// Note the comment between the `function` keyword
// and the function name, as well as the space following
// the function name.
function /* a comment */ foo () {}

// Previously:
foo.toString();
// → 'function foo() {}'
//             ^ no comment
//                ^ no space

// Now:
foo.toString();
// → 'function /* comment */ foo () {}'

配列#{flat、flatMap}

配列の次元数の削減。指定された深さまで配列を再帰的に平坦化します。デフォルトは1です。

// Flatten one level:
const array = [1, [2, [3]]];
array.flat();
// → [1, 2, [3]]

// Flatten recursively until the array contains no more nested arrays:
array.flat(Infinity);
// → [1, 2, 3]
[2, 3, 4].flatMap((x) => [x, x * 2]);
// → [2, 4, 3, 6, 4, 8]

2019.1.31更新

[2, 3, [2]].flatMap((x) => x + 1);
// [3, 4, "21"]

この結果について誰かが質問をしているのを見ただけで、flatMapの中に何かがあると思います。
実際、これが Addition-operator-plus(+)の理由です。 +は toprimitive を介して配列をString型に変換します。したがって、[2] + 1は “2” + 1 === “21”に変換されます。以下が証拠です。

tc39.github.io/ecma262/#se …
tc39.github.io/ecma262/#se …


Object.fromEntries

Object.fromEntries(Object.entries(object))≒object

それはLodashの_.fromPairsに似ています。

DYEuv5nW0AA5qHz.png

文字列#{trimStart、trimEnd}

前後の空白を削除するように指定できます。

const string = '  hello world  ';
string.trimStart();
// → 'hello world  '
string.trimEnd();
// → '  hello world'
string.trim();
// → 'hello world'

Symbol.prototype.description

ファクトリ関数Symbol()を使ってシンボルを作成するときは、パラメータを使って説明として文字列を提供することを選択できます。

const sym = Symbol('The description');

以前は、説明にアクセスする唯一の方法は、シンボルを文字列に変換することでした。

assert.equal(String(sym), 'Symbol(The description)');

説明に直接アクセスするためのgetter Symbol.prototype.descriptionを導入しましょう。

assert.equal(sym.description, 'The description');

{}をキャッチしてください{}

それでは{} catch {}を試してみてください。

過去に

try {} catch (e) {}

今

try-catch.png

更多提案:

github.com/tc39/propos…

更多请关注

元のリンク