tc39 Finished Proposalsjavascript
從表中能夠看到已經有多個特性加到了 ES2019 中。java
將 err
變成 optional
的,能夠省略 catch
後的 括號和錯誤對象:github
try {
// tryCode
} catch {
// catchCode
}
複製代碼
以前 try...catch
是這樣的:json
try {
// tryCode
} catch(err) {
// catchCode
}
複製代碼
好比:數組
try {
throw new Error('報錯啦報錯啦');
} catch(e) {
console.log(e); // Error: 報錯啦報錯啦
}
複製代碼
有的時候咱們只須要捕獲錯誤可是無需知道錯誤信息,err
就顯得不必的。ui
容許 未轉義的 U + 2028
行分隔符和 U + 2029
段分割符直接出如今字符串中,不會出現異常。prototype
以前,JSON的某些字符 \u2028
\u2029
會致使 Javascript 語法錯誤。code
eval('"\u2028"'); // SyntaxError: Unexpected
複製代碼
咱們的解決方法是對 \u2028
\u2029
進行轉義,好比:
str.Replace('\u2028', '\\u2028')
複製代碼
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
複製代碼
咱們知道,Symbol
的描述只被存儲在內部的 [[Description]]
,沒有直接對外暴露,咱們只有調用 Symbol
的 toString()
時才能夠讀取這個屬性:
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()
,在代碼裏這樣是不行的。
如今 foo.toString()
能夠返回精確字符串,包括空格和註釋等。
該方法把鍵值對列表轉換爲一個對象,能夠看做是 Object.entries()
的反向方法。
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 }
複製代碼
更友好的 JSON.stringify
,對於一些超出範圍的 Unicode
,爲其輸出轉義序列,使其成爲有效 Unicode
,
JSON.stringify('\uDF06\uD834'); // '"\\udf06\\ud834"'
JSON.stringify('\uDEAD'); // '"\\udead"'
複製代碼
JSON.stringify('\uDF06\uD834'); // '"��"'
JSON.stringify('\uDEAD'); // '"�"'
複製代碼
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.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];
複製代碼
是否是很方便...