返回

ECMAScript 2019:探索强大的新功能

见解分享

  1. Array.flat() 和 Array.flatMap()

ES2019引入了两个新的数组方法:Array.flat()Array.flatMap(),用于处理嵌套数组。

Array.flat() 方法返回一个新数组,其中所有子数组都被展开到指定深度。例如,以下代码将把一个包含子数组的数组展开成一个一维数组:

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

const flattenedArr = arr.flat();

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

Array.flatMap() 方法与 Array.flat() 类似,但它允许你对每个子数组元素应用一个映射函数,然后再将它们展开到一个新数组中。例如,以下代码将使用一个映射函数将子数组中的数字乘以 2,然后将它们展开成一个一维数组:

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

const doubledArr = arr.flatMap(arr => arr.map(num => num * 2));

console.log(doubledArr); // [2, 4, 6, 8, 10, 12]

2. 对象展开运算符

ES2019还引入了对象展开运算符(...),它允许你将一个对象展开到另一个对象中。这使得合并对象和创建新对象变得更加容易。例如,以下代码将把 obj1obj2 合并成一个新对象 obj3

const obj1 = { name: 'John', age: 30 };
const obj2 = { job: 'developer', salary: 5000 };

const obj3 = { ...obj1, ...obj2 };

console.log(obj3); // { name: 'John', age: 30, job: 'developer', salary: 5000 }

3. 新的 Promise 处理方法

ES2019还引入了几个新的 Promise 处理方法,使处理异步代码变得更加容易。

  • Promise.allSettled() 方法返回一个 Promise,该 Promise 将在所有给定的 Promise 都已完成(无论是成功还是失败)后完成。例如,以下代码将等待 p1p2 两个 Promise 都完成,然后打印结果:
const p1 = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve('p1 resolved');
  }, 1000);
});

const p2 = new Promise((resolve, reject) => {
  setTimeout(() => {
    reject('p2 rejected');
  }, 2000);
});

Promise.allSettled([p1, p2]).then(results => {
  console.log(results); // [{ status: 'fulfilled', value: 'p1 resolved' }, { status: 'rejected', reason: 'p2 rejected' }]
});
  • Promise.finally() 方法返回一个 Promise,该 Promise 将在给定的 Promise 完成后执行,无论其是成功完成还是失败完成。例如,以下代码将打印一条消息,无论 p1 是成功完成还是失败完成:
const p1 = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve('p1 resolved');
  }, 1000);
});

p1.finally(() => {
  console.log('p1 is done');
});

4. 正则表达式的增强

ES2019还对正则表达式做了一些增强,使之更加强大和灵活。

  • s 标志(sticky flag)使正则表达式只匹配字符串的开头。例如,以下正则表达式将只匹配字符串 "John Doe" 的开头:
const regex = /^John Doe$/s;

const str = 'John Doe is a developer';

const result = str.match(regex);

console.log(result); // ['John Doe']
  • u 标志(unicode flag)使正则表达式支持 Unicode 字符。例如,以下正则表达式将匹配任何包含字母 "a" 的 Unicode 字符:
const regex = /a/u;

const str = 'a\u00e1\u00e0\u00e2\u00e3';

const result = str.match(regex);

console.log(result); // ['a', 'á', 'à', 'â', 'ã']

结语

ES2019 引入了许多新功能,使 JavaScript 语言更加强大和灵活。这些新功能可以帮助开发人员编写更有效和更易维护的代码。在本文中,我们探讨了一些最实用的新功能,包括 Array.flat()Array.flatMap()、对象展开运算符、新的 Promise 处理方法以及正则表达式的增强。希望这些信息对您有所帮助。