Skip to main content

ES2019

ES2019 提供了一系列实用的数组、对象和字符串操作方法。

1. 数组扁平化 (Array.prototype.flat / flatMap)

  • flat(depth):按照指定的深度递归遍历数组,并将所有元素与遍历到的子数组中的元素合并为一个新数组返回。默认深度为 1。使用 Infinity 可以无限扁平化。
  • flatMap():首先使用映射函数映射每个元素,然后将结果压缩成一个新数组(等同于先 mapflat(1),但效率略高)。
const arr = [1, 2, [3, [4, 5]]];
console.log(arr.flat(2)); // [1, 2, 3, 4, 5]

2. Object.fromEntries()

Object.entries() 的反向操作。把键值对列表(如二维数组或 Map)转换为一个对象。非常适合用于将 Map 转换为对象,或者解析 URL 参数。

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

3. 可选的 catch 参数 (Optional Catch Binding)

允许在 try/catch 语句中省略 catch 块的参数(如果你不需要使用错误对象)。

try {
// 可能会抛出错误的代码
} catch {
// 不再需要强迫写 catch(err)
console.log('出错了,但不关心具体的错误信息');
}

4. 字符串修剪 (String.prototype.trimStart / trimEnd)

去除字符串开头或结尾的空白字符。是之前的 trimLeft()trimRight() 的标准别名。

5. String.prototype.matchAll()

返回一个包含所有匹配正则表达式的结果及分组捕获组的迭代器。相比 match(),它能更方便地提取所有捕获组的数据。

6. Symbol.prototype.description

提供了一个只读属性,直接返回 Symbol 对象在创建时传入的描述字符串。

const sym = Symbol('my symbol');
console.log(sym.description); // "my symbol"

7. 数组排序稳定性 (Stable Sort)

规范明确要求 Array.prototype.sort() 必须是稳定的(即如果两个元素相等,它们在排序后的相对顺序与排序前保持一致)。V8 引擎因此放弃了原先不稳定的快速排序,改用了 Timsort。