目录

ECMAScript 2019

JavaScript 版本号

旧的 JS 版本以数字命名:ES5 (2009) 和 ES6 (2015)。

从 2016 年开始,版本按年份命名:ECMAScript 2016、2017、2018、2019,...

ES2019的新特性

警告

这些功能相对较新。

较旧的浏览器可能需要替代代码(Polyfill)


JavaScript 字符串修剪开始()

ES2019添加了String方法trimStart()到 JavaScript。

这个trimStart()方法的工作原理就像trim(),但仅删除字符串开头的空格。

示例

let text1 = "     Hello World!     ";
let text2 = text1.trimStart();
亲自试一试 »

JavaScript 字符串trimStart()自 2020 年 1 月起所有现代浏览器均支持:

Chrome 66 Edge 79 Firefox 61 Safari 12 Opera 50
Apr 2018 Jan 2020 Jun 2018 Sep 2018 May 2018

JavaScript 字符串修剪结束()

ES2019添加了String方法trimEnd()到 JavaScript。

这个trimEnd()方法的工作原理就像trim(),但仅删除字符串末尾的空格。

示例

let text1 = "     Hello World!     ";
let text2 = text1.trimEnd();
亲自试一试 »

JavaScript 字符串trimEnd()自 2020 年 1 月起所有现代浏览器均支持:

Chrome 66 Edge 79 Firefox 61 Safari 12 Opera 50
Apr 2018 Jan 2020 Jun 2018 Sep 2018 May 2018

JavaScript 对象 fromEntries()

ES2019添加了Object方法fromEntries()到 JavaScript。

这个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
Mar 2019 Jan 2020 Oct 2018 Mar 2019 Apr 2019


可选的 catch 绑定

从 ES2019 开始,如果不需要,可以省略 catch 参数:。

示例

2019 年之前:

try {
// code
} catch (err) {
// code
}

2019年后:

try {
// code
} catch {
// code
}

自 2020 年 1 月起,所有现代浏览器都支持可选的 catch 绑定:

Chrome 66 Edge 79 Firefox 58 Safari 11.1 Opera 53
Apr 2018 Jan 2020 Jan 2018 Mar 2018 May 2018

JavaScript Array flat()

ES2019添加了数组flat()JavaScript 方法。

这个flat()方法通过展平嵌套数组来创建一个新数组。

示例

const myArr = [[1,2],[3,4],[5,6]];
const newArr = myArr.flat();
亲自试一试 »

JavaScript 数组flat()自 2020 年 1 月起所有现代浏览器均支持:

Chrome 69 Edge 79 Firefox 62 Safari 12 Opera 56
Sep 2018 Jan 2020 Sep 2018 Sep 2018 Sep 2018

JavaScript Array flatMap()

ES2019添加了数组flatMap()JavaScript 方法。

这个flatMap()方法首先映射数组的所有元素,然后通过展平数组来创建一个新数组。

示例

const myArr = [1, 2, 3, 4, 5, 6];
const newArr = myArr.flatMap((x) => x * 2);
亲自试一试 »

稳定数组排序()

ES2019修改阵列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修改JSONstringify()方法。

2019 年之前,JSON 无法对使用 \ 编码的字符进行字符串化。

示例

let text = JSON.stringify("\u26D4");
亲自试一试 »

ES2019之前,使用JSON.stringify()UTF-8 代码点(U+D800 到 U+DFFF)上的 JSON 返回损坏的 Unicode 字符,例如 ���。

在此修订之后,具有 UTF-8 代码点的字符串可以安全地转换为JSON.stringify(),然后回到原来的使用JSON.parse()


分隔符符号

现在,字符串文字中允许使用行分隔符和段落分隔符符号(\u2028 和 \u2029)。

在 2019 年之前,这些被视为行终止符并导致错误异常:

示例

// This is valid in ES2019:
let text = "\u2028";
亲自试一试 »

笔记

现在,JavaScript 和 JSON 具有相同的规则。

ES2019 之前:

text = JSON.parse('"\u2028"') 将解析为 ''。

text = '"\u2028"' 会给出语法错误


修改后的函数 toString()

ES2019修改函数toString()方法。

这个toString()方法返回一个表示函数源代码的字符串。

从 2019 年开始,toString() 必须返回函数的源代码,包括注释、空格和语法详细信息。

在 2019 年之前,不同的浏览器返回该函数的不同变体(例如没有注释和空格)。从 2019 年开始,该函数应完全按照编写的方式返回。

示例

function myFunction(p1, p2) {
  return p1 * p2;
}
亲自试一试 »