1. Promise.withResolvers():更优雅的 Promise 管理
在以往,我们创建 Promise 时,通常需要手动定义 resolve 和 reject 函数。ES2024 引入了 Promise.withResolvers() 方法,可以更简洁地创建 Promise,并直接获取 resolve 和 reject 函数。
示例代码:
const { promise, resolve, reject } = Promise.withResolvers();
// 模拟异步操作
setTimeout(() => {
const success = Math.random() > 0.5;
if (success) {
resolve("操作成功!");
} else {
reject("操作失败!");
}
}, 1000);
promise
.then((result) => console.log("Promise resolved:", result))
.catch((error) => console.error("Promise rejected:", error));
解释:
Promise.withResolvers()返回一个包含promise、resolve和reject属性的对象。- 我们可以直接使用
resolve和reject函数来控制 Promise 的状态,代码更加清晰易读。
2. groupBy更加优雅的分组
Map.groupBy()方法可以将可迭代项(iterables)分组到Map对象中,其键由回调函数提供。Object.groupBy()方法执行类似的分组操作,但结果是一个普通对象。
// Create an Array
const fruits = [
{name:"apples", quantity:300},
{name:"bananas", quantity:500},
{name:"oranges", quantity:200},
{name:"kiwi", quantity:150}
];
// Callback function to select low volumes
function myCallback({ quantity }) {
return quantity > 200 ? "ok" : "low";
}
// Group by ok and low
const result = Object.groupBy(fruits, myCallback);
//或者用Map 两者不一样的就是Object返回的是object对象,Map返回的是Map对象
// const result = Map.groupBy(fruits, myCallback);
解释:
myCallback是一个分组评判标准函数。- 使用
Object.groupBy或者Map.groupBy获取分组的结果
3. RegExp 增强:更强大的正则表达式
v标志: 允许使用 Unicode 属性转义,例如\p{Emoji}可以匹配所有 Emoji 字符。
示例代码:
// 转义 Unicode 字符串属性
const emojiRegex = /\p{Emoji}/v;
console.log(emojiRegex.test("😀")); // 输出: true
console.log(emojiRegex.test("a")); // 输出: false
解释:
v标志让正则表达式可以更好地处理 Unicode 字符。