返回
ECMAScript 2019:探索强大的新功能
见解分享
2024-01-24 06:08:52
- 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还引入了对象展开运算符(...
),它允许你将一个对象展开到另一个对象中。这使得合并对象和创建新对象变得更加容易。例如,以下代码将把 obj1
和 obj2
合并成一个新对象 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 都已完成(无论是成功还是失败)后完成。例如,以下代码将等待p1
和p2
两个 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 处理方法以及正则表达式的增强。希望这些信息对您有所帮助。