ES2024 新特性抢先看:让你的 JavaScript 代码更上一层楼!

70 阅读1分钟

1. Promise.withResolvers():更优雅的 Promise 管理

在以往,我们创建 Promise 时,通常需要手动定义 resolvereject 函数。ES2024 引入了 Promise.withResolvers() 方法,可以更简洁地创建 Promise,并直接获取 resolvereject 函数。

示例代码:

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() 返回一个包含 promiseresolvereject 属性的对象。
  • 我们可以直接使用 resolvereject 函数来控制 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 字符。