ECMAScript 2019
JavaScript 版本號
舊的 JS 版本以數字命名:ES5 (2009) 和 ES6 (2015)。
從 2016 年開始,版本按年份命名:ECMAScript 2016、2017、2018、2019、...
ES2019 中的新特性:
- String.trimStart()
- String.trimEnd()
- Object.fromEntries
- 可選的 catch 綁定
- Array.flat()
- Array.flatMap()
- 重新修訂的 Array.Sort()
- 重新修訂的 JSON.stringify()
- 字符串文字中允許的分隔符
- 重新修訂的 Function.toString()
警告
這些特性相對較新。
較舊的瀏覽器可能需要替代代碼(Polyfill)
JavaScript 字符串方法 trimStart()
ES2019 為 JavaScript 添加了 String 方法 trimStart()
。
trimStart()
方法的工作方式與 trim()
類似,但僅從字符串的開頭刪除空格。
實例
let text1 = " Hello World! "; let text2 = text1.trimStart();
自 2020 年 1 月以來,所有現代瀏覽器都支持 JavaScript String trimStart():
Chrome | Edge | Firefox | Safari | Opera |
---|---|---|---|---|
Chrome 66 | Edge 79 | Firefox 61 | Safari 12 | Opera 50 |
2018 年 4 月 | 2020 年 1 月 | 2018 年 6 月 | 2018 年 9 月 | 2018 年 5 月 |
JavaScript 字符串方法 trimEnd()
ES2019 為 JavaScript 添加了 trimEnd()
字符串方法。
trimEnd()
方法的工作方式與 trim()
類似,但僅從字符串末尾刪除空格。
實例
let text1 = " Hello World! "; let text2 = text1.trimEnd();
自 2020 年 1 月以來,所有現代瀏覽器都支持 JavaScript String trimEnd():
Chrome | Edge | Firefox | Safari | Opera |
---|---|---|---|---|
Chrome 66 | Edge 79 | Firefox 61 | Safari 12 | Opera 50 |
2018 年 4 月 | 2020 年 1 月 | 2018 年 6 月 | 2018 年 9 月 | 2018 年 5 月 |
JavaScript 對象方法 fromEntries()
ES2019 為 JavaScript 添加了 fromEntries()
對象方法。
fromEntries()
方法從可迭代的鍵/值對創建對象。
實例
const fruits = [ ["apples", 300], ["pears", 900], ["bananas", 500] ]; const myObj = Object.fromEntries(fruits);
自 2020 年 1 月以來,所有現代瀏覽器都支持 JavaScript Object fromEntries():
Chrome | Edge | Firefox | Safari | Opera |
---|---|---|---|---|
Chrome 73 | Edge 79 | Firefox 63 | Safari 12.1 | Opera 60 |
2019 年 3 月 | 2020 年 1 月 | 2018 年 10 月 | 2019 年 3 月 | 2019 年 4 月 |
可選的 catch 綁定
從 ES2019 開始,如果不需要,可以省略 catch 參數:
實例
2019 年之前:
try { // code } catch (err) { // code }
2019 年后:
try { // code } catch { // code }
自 2020 年 1 月以來,所有現代瀏覽器都支持可選的 catch 綁定:
Chrome | Edge | Firefox | Safari | Opera |
---|---|---|---|---|
Chrome 66 | Edge 79 | Firefox 58 | Safari 11.1 | Opera 53 |
2018 年 4 月 | 2020 年 1 月 | 2018 年 1 月 | 2018 年 3 月 | 2018 年 5 月 |
JavaScript 數組方法 flat()
ES2019 為 JavaScript 添加了 flat()
數組方法。
flat()
方法通過展平嵌套數組來創建新數組。
實例
const myArr = [[1,2],[3,4],[5,6]]; const newArr = myArr.flat();
自 2020 年 1 月以來,所有現代瀏覽器都支持 JavaScript Array flat():
Chrome | Edge | Firefox | Safari | Opera |
---|---|---|---|---|
Chrome 69 | Edge 79 | Firefox 62 | Safari 12 | Opera 56 |
2018 年 9 月 | 2020 年 1 月 | 2018 年 9 月 | 2018 年 9 月 | 2018 年 9 月 |
JavaScript 數組方法 flatMap()
ES2019 為 JavaScript 添加了 flatMap()
數組方法。
flatMap()
方法首先映射數組的所有元素,然后通過展平數組來創建新數組。
實例
const myArr = [1, 2, 3, 4, 5, 6]; const newArr = myArr.flatMap((x) => x * 2);
穩定的數組方法 sort()
ES2019 修訂了 Array sort() 方法。
在 2019 年之前,規范允許不穩定的排序算法,例如 QuickSort。
在 ES2019 之后,瀏覽器必須使用穩定的排序算法:
當根據一個值對元素進行排序時,這些元素必須保持它們與具有相同值的其他元素的相對位置。
實例
const myArr = [ {name:"X00",price:100 }, {name:"X01",price:100 }, {name:"X02",price:100 }, {name:"X03",price:100 }, {name:"X04",price:110 }, {name:"X05",price:110 }, {name:"X06",price:110 }, {name:"X07",price:110 } ];
在上面的例子中,當按價格排序時,結果不允許出現在其他相對位置的名稱,如下所示:
X01 100 X03 100 X00 100 X03 100 X05 110 X04 110 X06 110 X07 110
重新修訂的 JSON.stringify()
ES2019 修訂了 JSON 的 stringify() 方法。
在 2019 年之前,JSON 無法對使用 \ 編碼的字符進行字符串化。
實例
let text = JSON.stringify("\u26D4");
在 ES2019 之前,在 UTF-8 代碼點(U+D800 到 U+DFFF)上使用 JSON.stringify() 會返回損壞的 Unicode 字符,例如 ���。
此次修訂后,具有 UTF-8 代碼點的字符串可以使用 JSON.stringify() 安全地轉換,并使用 JSON.parse() 恢復為原始字符串。
分隔符號
字符串文字中現在允許使用行分隔符和段落分隔符(\u2028
和 \u2029
)。
在 2019 年之前,這些被視為行終止符并導致錯誤異常:
實例
// 這在 ES2019 中是有效的: let text = "\u2028";
注意
現在,JavaScript 和 JSON 擁有相同的規則。
在 ES2019 之前:
text = JSON.parse('"\u2028"') 會解析為 ''。
text = '"\u2028"' 會給出語法錯誤。
重新修訂的 Function toString()
ES2019 修訂了 Function toString() 方法。
toString() 方法返回表示函數源代碼的字符串。
從 2019 年開始,toString() 必須返回函數的源代碼,包括注釋、空格和語法細節。
在 2019 年之前,不同的瀏覽器返回了不同的函數變體(比如沒有注釋和空格)。從 2019 年開始,該函數應該完全按照編寫的方式返回。
實例
function myFunction(p1, p2) { return p1 * p2; }