ECMAScript 2019
JavaScript 版本号
旧的 ECMAScript 版本使用数字命名:ES5 和 ES6。
从 2016 年起,版本使用年份命名:ES2016、2018、2020 ...
ES2019 中的新特性
- String.trimStart()
- String.trimEnd()
- Object.fromEntries
- 可选 catch 绑定
- Array.flat()
- Array.flatMap()
- 修改后的 Array.Sort()
- 修改后的 JSON.stringify()
- 字符串字面量中允许使用分隔符
- 修改后的 Function.toString()
JavaScript 字符串 trimStart()
ES2019 在 JavaScript 中添加了 String 方法 trimStart()
。
trimStart()
方法类似于 trim()
,但只从字符串开头删除空白符。
JavaScript 字符串 trimStart()
从 2020 年 1 月起在所有现代浏览器中都受支持
Chrome 66 | Edge 79 | Firefox 61 | Safari 12 | Opera 50 |
2018 年 4 月 | 2020 年 1 月 | 2018 年 6 月 | 2018 年 9 月 | 2018 年 5 月 |
JavaScript 字符串 trimEnd()
ES2019 在 JavaScript 中添加了 String 方法 trimEnd()
。
trimEnd()
方法类似于 trim()
,但只从字符串结尾删除空白符。
JavaScript 字符串 trimEnd()
从 2020 年 1 月起在所有现代浏览器中都受支持
Chrome 66 | Edge 79 | Firefox 61 | Safari 12 | Opera 50 |
2018 年 4 月 | 2020 年 1 月 | 2018 年 6 月 | 2018 年 9 月 | 2018 年 5 月 |
JavaScript 对象 fromEntries()
ES2019 在 JavaScript 中添加了 Object 方法 fromEntries()
。
fromEntries()
方法从可迭代的键值对创建对象。
示例
const fruits = [
["apples", 300],
["pears", 900],
["bananas", 500]
];
const myObj = Object.fromEntries(fruits);
亲自试一试 »
JavaScript 对象 fromEntries()
从 2020 年 1 月起在所有现代浏览器中都受支持
Chrome 73 | Edge 79 | Firefox 63 | Safari 12.1 | Opera 60 |
2019 年 3 月 | 2020 年 1 月 | 2018 年 10 月 | 2019 年 3 月 | 2019 年 4 月 |
可选捕获绑定
从 ES2019 开始,如果不需要,可以省略 catch 参数:.
示例
2019 年之前
try {
// 代码
} catch (err) {
// 代码
}
2019 年之后
try {
// 代码
} catch {
// 代码
}
可选捕获绑定自 2020 年 1 月起在所有现代浏览器中均受支持
Chrome 66 | Edge 79 | Firefox 58 | Safari 11.1 | Opera 53 |
2018 年 4 月 | 2020 年 1 月 | 2018 年 1 月 | 2018 年 3 月 | 2018 年 5 月 |
JavaScript 数组 flat()
ES2019 将 Array flat()
方法添加到 JavaScript 中。
flat()
方法通过展平嵌套数组创建一个新数组。
JavaScript 数组 flat()
自 2020 年 1 月起在所有现代浏览器中均受支持
Chrome 69 | Edge 79 | Firefox 62 | Safari 12 | Opera 56 |
2018 年 9 月 | 2020 年 1 月 | 2018 年 9 月 | 2018 年 9 月 | 2018 年 9 月 |
JavaScript 数组 flatMap()
ES2019 将 Array flatMap()
方法添加到 JavaScript 中。
flatMap()
方法首先映射数组的所有元素,然后通过展平数组创建一个新数组。
稳定数组 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 无法将用 \ 编码的字符进行字符串化。
ES2019 之前,对 UTF-8 代码点 (U+D800 到 U+DFFF) 使用 JSON.stringify()
JSON 会返回损坏的 Unicode 字符,如 ���。
这次修改之后,带有 UTF-8 代码点的字符串可以使用 JSON.stringify()
安全地转换,并使用 JSON.parse()
转换回原始值。
分隔符
现在,字符串文字中允许使用换行符和段落分隔符符号(\u2028 和 \u2029)。
2019 年之前,这些被视为行终止符,会导致错误异常
注意
现在,JavaScript 和 JSON 具有相同的规则。
ES2019 年之前
text = JSON.parse('"\u2028"') 将解析为 ''。
text = '"\u2028"' 会导致 **语法错误**。
修改后的 Function toString()
ES2019 **修改** 了 Function toString()
方法。
toString()
方法返回一个表示函数源代码的字符串。
从 2019 年开始,toString() 必须返回函数的源代码,包括注释、空格和语法细节。
2019 年之前,不同的浏览器返回函数的不同变体(例如,没有注释和空格)。从 2019 年开始,函数应按原样返回。