ES2019に入りそうな機能

出典：https://github.com/tc39/ecma262
※現時点で、ES2019に採用されるかは未確定です。

## [optional-catch-binding](https://github.com/tc39/proposal-optional-catch-binding)(Stage4)
`try...catch`の`catch`の引数が必須でなくなる。
[実装状況(MDN)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/try...catch#Browser_compatibility)

例

```javascript
try {
  //処理
} catch (e) {}
```
が、↓でもよくなる

```javascript
try {
  //処理
} catch {}
```

## [json-superset](https://github.com/tc39/proposal-json-superset)(Stage4)
JSONにおいて、エスケープされていないU+2028(LINE SEPARATOR)とU+2029(PARAGRAPH SEPARATOR)が扱えるようになる。
[実装状況(MDN)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON#Browser_compatibility)

以下のような問題が解決されるはず
[JSONPで受け取れない文字? \u2028 - Qiita](https://qiita.com/kjunichi/items/4c9d0cb408fbc846799f)

## [`Symbol.prototype.description`](https://github.com/tc39/proposal-Symbol-description)(Stage4)
Symbolオブジェクトのdescriptionのみを返す。
[実装状況(MDN)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/description)

例

```javascript
Symbol('foo').description; // "foo"
Symbol('foo').toString();  // "Symbol(foo)"
```

## [`Array.prototype.flat()`](https://github.com/tc39/proposal-flatMap)(Stage3)
Arrayの次元を下げることができる。
[実装状況(MDN)](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/flat#%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6%E3%83%BC%E5%AE%9F%E8%A3%85%E7%8A%B6%E6%B3%81)

例

```javascript
[1, [2, 3, 4]].flat(); //[1, 2, 3, 4]
[1, [2, [3, 4]]].flat(2); //[1, 2, 3, 4]
```

## [`Array.prototype.flatMap()`](https://github.com/tc39/proposal-flatMap)(Stage3)
`Array.prototype.map()`の次元を1下げて返すバージョン。
[実装状況(MDN)](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/flatMap#%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6%E3%83%BC%E5%AE%9F%E8%A3%85%E7%8A%B6%E6%B3%81)

例

```javascript
[1, 2, 3, 4].flatMap(v => [v]); //[1, 2, 3, 4]
[1, 2, 3, 4].map(v => [v]); //[[1], [2], [3], [4]]
```
使い所が思いつかない🤔

## [globalThis](https://github.com/tc39/proposal-global)(Stage3)
グローバルオブジェクトを取得する統一された方法が無かったため、生み出された。

```javascript
globalThis === window; //true
```

こちらが詳しいです。
[👻globalThis👻と🌏global🌏と🌝this🌝 - Qiita](https://qiita.com/uhyo/items/f3b6feef9444e86bef94)

## [dynamic-import](https://github.com/tc39/proposal-dynamic-import)(Stage3)
`import()`を使って動的にモジュールを読み込めるようになる。
[実装状況(MDN)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import#Browser_compatibility)

例

```javascript
const myModule = await import('my-module.js');
```
こちらが詳しいです。
[Chrome、Safariで使えるJavaScriptのdynamic import（動的読み込み） - Qiita](https://qiita.com/tonkotsuboy_com/items/f672de5fdd402be6f065)

### [BigInt](https://github.com/tc39/proposal-bigint)(Stage3)
任意精度の整数を扱えるようになる。(現在number型で正確に扱える最大の整数は9007199254740991)

例

```javascript
BigInt(9007199254740991);
9007199254740991n; //リテラル表記
```

こちらが詳しいです。
[Chrome 67からJavaScriptのプリミティブ型BigIntが使用可能に - Qiita](https://qiita.com/gtnao0219/items/c773a86991f0a21fc27e)

## [`Object.fromEntries()`](https://github.com/tc39/proposal-object-from-entries)(Stage3)
キーと値を持つArrayかMapをオブジェクトに変換できる。(`Object.entries()`の逆)
[実装状況(MDN)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import#Browser_compatibility)

例

```javascript
Object.fromEntries([['a', 1], ['b', 2]]);
//{ a: 1, b: 2 }
```

## [`String.prototype.{trimStart(),trimEnd()}`](https://github.com/tc39/proposal-string-left-right-trim)(Stage3)
`String.prototype.trim()`の(左|右)側の空白のみ取り除くバージョン。
`trimLeft(),trimRight()`はエイリアス。
[実装状況(MDN)](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/String/TrimLeft#Browser_compatibility)

例

```javascript
' a '.trimStart(); //"a "
' a '.trimLeft();  //"a "
' a '.trimEnd();   //" a"
' a '.trimRight(); //" a"
```