回顾 ECMAScript 2019 特性

187 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第6天,点击查看活动详情

ECMAScript 2019 特性

最初的JavaScript版本号是ES5(2009)和ES6(2015)。从2016年开始,版本按年份命名:ECMAScript 2016、2017、2018、2019。
本章介绍 ECMAScript 2019 中的新特性:

String.prototype.trimStart()

  • trimStart() 方法从字符串的开头删除空格。trimLeft() 是此方法的别名。
  • 移除原字符串左端的连续空白符并返回一个新字符串

注意:此方法不会直接修改原字符串本身。

示例语法

var str = "   foo  ";
str = str.trimStart();  // 或写成 str = str.trimLeft();
console.log(str);        // "foo  "

String.prototype.trimRight()

  • trimEnd() 方法从一个字符串的末端移除空白字符。trimRight() 是这个方法的别名。
  • 该方法移除原字符串右端的连续空白符并返回,

注意:此方法不会直接修改原字符串本身。

示例语法

var str = "   foo  ";
str = str.trimRight();  // 或写成 str = str.trimEnd();
console.log(str);       // '   foo'

Object fromEntries()

  • Object.fromEntries() 方法把键值对列表转换为一个对象。

  • 接收一个键值对的列表参数,并返回一个带有这些键值对的新对象。

  • Object.fromEntries 是与 Object.entries() 相反的方法

    • 不同的是 Object.fromEntries() 接收的参数是:类似 Array 、 Map 或者其它实现了可迭代协议的可迭代对象。

      • 目前所有的内置可迭代对象如下:String、Array、TypedArray、Map 和 Set,它们的原型对象都实现了 @@iterator 方法。
    • Object.entries() 接收的参数是: 可以返回其可枚举属性的键值对的对象

示例语法

Map 转化为 Object:
const map = new Map([ ['foo', 'bar'], ['baz', 42] ]); 
console.log(Object.fromEntries(map));  // { foo: "bar", baz: 42 }

Array 转化为 Object
const arr = [ ['0', 'a'], ['1', 'b'], ['2', 'c'] ];
console.log(Object.fromEntries(arr));  // { 0: "a", 1: "b", 2: "c" }

可选的捕获绑定

  • 在ES2019中,如果你不需要catch参数,你可以省略它

示例语法

  • ECMAScript 2019 之前
try {
  // code
} catch (err) {
  // code
}
  • ECMAScript 2019 之后
try {
  // code
} catch {
  // code
}

Array.prototype.flat()

  • flat() 方法会按照一个可指定的深度递归遍历数组,并将所有元素与遍历到的子数组中的元素合并为一个新数组返回。
  • flat() 方法会移除数组中的空项

举个例子

const arr1 = [0, 1, 2, [3, 4]];

console.log(arr1.flat());
// expected output: [0, 1, 2, 3, 4]

const arr2 = [0, 1, 2, [[[3, 4]]]];

console.log(arr2.flat(2));
// expected output: [0, 1, 2, [3, 4]]

Array.prototype.flatMap()

  • flatMap() 方法首先使用映射函数映射每个元素,然后将结果压缩成一个新数组。
  • 它与 map 连着深度值为 1 的 flat 几乎相同,但 flatMap 通常在合并成一种方法的效率稍微高一些。

例子

const arr1 = [1, 2, [3], [4, 5], 6, []];

const flattened = arr1.flatMap(num => num);

console.log(flattened); // [1, 2, 3, 4, 5, 6]

JSON.stringify() 优化

  • 在2019年之前,JSON无法用\编码的字符串起。

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

    • 此修订后,使用UTF-8代码点的字符串用JSON.stringify() 安全转换,然后使用JSON.parse() 返回原件。

Array.sort() 优化

  • ES2019修订了数组sort()方法。
  • 在2019年之前,该规范允许不稳定的排序算法(例如QuickSort)。
  • 现在,主要浏览器必须使用稳定的排序算法:在键上对对象进行排序时,列表中的元素必须将其位置保留在其他对象上,以相同的键。

修订功能tostring()

  • toString() 方法返回一个表示函数源代码的字符串。
  • toString() 必须返回该功能的源代码,包括评论,空格和语法详细信息