ES2019 新特性簡介

ES2019

tc39 Finished Proposalsjavascript

ES2019

從表中能夠看到已經有多個特性加到了 ES2019 中。java

Optional catch binding

github.com/tc39/propos…git

err 變成 optional 的,能夠省略 catch 後的 括號和錯誤對象:github

try {
  // tryCode
} catch {
  // catchCode
}
複製代碼

Previous

以前 try...catch 是這樣的:json

try {
  // tryCode
} catch(err) {
  // catchCode
}
複製代碼
  • tryCode:(必須)嘗試執行的代碼
  • err:(必須)指定局部變量應用的錯誤
  • catchCode:(可選)捕獲錯誤的代碼

好比:數組

try {
  throw new Error('報錯啦報錯啦');
} catch(e) {
  console.log(e); // Error: 報錯啦報錯啦
}
複製代碼

有的時候咱們只須要捕獲錯誤可是無需知道錯誤信息,err 就顯得不必的。ui

JSON superset

github.com/tc39/propos…spa

容許 未轉義的 U + 2028 行分隔符和 U + 2029 段分割符直接出如今字符串中,不會出現異常。prototype

Previous

以前,JSON的某些字符 \u2028 \u2029 會致使 Javascript 語法錯誤。code

eval('"\u2028"'); // SyntaxError: Unexpected
複製代碼

咱們的解決方法是對 \u2028 \u2029 進行轉義,好比:

str.Replace('\u2028', '\\u2028')
複製代碼

Symbol.prototype.description

github.com/tc39/propos…

Symbol.prototype.description | MDN

能夠經過 description 方法獲取 Symbol 的描述:

const name = Symbol('My name is axuebin');
console.log(name.description); // My name is axuebin
console.log(name.description === 'My name is axuebin'); // My name is axuebin
複製代碼

Previous

咱們知道,Symbol 的描述只被存儲在內部的 [[Description]],沒有直接對外暴露,咱們只有調用 SymboltoString() 時才能夠讀取這個屬性:

const name = Symbol('My name is axuebin');
console.log(name.toString()); // Symbol(My name is axuebin)
console.log(name); // Symbol(My name is axuebin)
console.log(name === 'Symbol(My name is axuebin)'); // false
console.log(name.toString()) === 'Symbol(My name is axuebin)'); // true

複製代碼

在執行 console.log(name) 的時候也打印了描述信息,是由於這裏隱式地執行了 toString(),在代碼裏這樣是不行的。

Function.prototype.toString revision

github.com/tc39/Functi…

如今 foo.toString() 能夠返回精確字符串,包括空格和註釋等。

Object.fromEntries

github.com/tc39/propos…

Object.fromEntries() | MDN

該方法把鍵值對列表轉換爲一個對象,能夠看做是 Object.entries() 的反向方法。

  • Arguments:(Array): 鍵值對。
  • Returns:(Object): 對象。
const arr = Object.entries({ name: 'axuebin', age: 27 });
console.log(arr); // ["name", "axuebin"], ["age', 27]]

const obj = Object.fromEntries(arr);
console.log(obj); // { name: 'axuebin', age: 27 }
複製代碼

lodash_.fromPairs 具備同樣的功能。

const obj = _.fromPairs(['name', 'axuebin'], ['age', 27]);
console.log(obj); // { name: 'axuebin', age: 27 }
複製代碼

Well-formed JSON.stringify

github.com/tc39/propos…

更友好的 JSON.stringify,對於一些超出範圍的 Unicode,爲其輸出轉義序列,使其成爲有效 Unicode

JSON.stringify('\uDF06\uD834'); // '"\\udf06\\ud834"'
JSON.stringify('\uDEAD'); // '"\\udead"'
複製代碼

Previous

JSON.stringify('\uDF06\uD834'); // '"��"'
JSON.stringify('\uDEAD'); // '"�"'
複製代碼

String.prototype.{trimStart,trimEnd}

github.com/tc39/propos…

String.prototype.trimStart() | MDN

String.prototype.trimEnd() | MDN

分別去除字符串先後的空格,生成新的字符串。

const str = ' axuebin ';
console.log(str.trimStart()); // 'axuebin '
console.log(str.trimEnd()); // ' axuebin'
console.log(str); // ' axuebin '
複製代碼

Array.prototype.{flat,flatMap}

github.com/tc39/propos…

Array.prototype.flat() | MDN

Array.prototype.flatMap() | MDN

還記得這樣一道筆試題麼,給你一個多維數組,把它拍平!

const arr = [1, [2, [3, [4, [5, 6]]]]];
arr.flat(); // [1, 2, [3, [4, [5, 6]]]]
arr.flat(1); // [1, 2, [3, [4, [5, 6]]]]
arr.flat(2); // [1, 2, 3, [4, [5, 6]]]
arr.flat(3); // [1, 2, 3, 4, [5, 6]]
arr.flat(4); // [1, 2, 3, 4, 5, 6]
複製代碼
const arr = [[1, 2, 3], [4, 5]];
arr.flatMap(item => item); [1, 2, 3, 4, 5];
複製代碼

是否是很方便...

暫時就這些啦

原文連接:github.com/axuebin/art…

相關文章
相關標籤/搜索