ECMAScript 2024(ES15)

2025-02-20 20:00
2025-02-23 14:33
472

核心特性

1. Promise.withResolvers()

Promise.withResolvers() 提供了一种创建我们想要解决的 Promise 的新方法:

javascript
      const { promise, resolve, reject } = Promise.withResolvers();

    

2. 数据分组方法

  • Map.groupBy() 将可迭代对象分组为一个新的 Map,Map 中的 key 由回调提供
  • Object.groupBy() 将可迭代对象分组为一个新的对象,对象中的 key 由回调提供
javascript
      Map.groupBy([0, -5, 3, -4, 8, 9], x => Math.sign(x));
Object.groupBy([0, -5, 3, -4, 8, 9], x => Math.sign(x));

    

3. 正则表达式 v 标志

v 标志是 u 标志的“升级”,可启用更多与 Unicode 相关的功能。 (“v”是字母表中“u”之后的下一个字母。)由于 u 和 v 以不兼容的方式解释相同的正则表达式,因此使用这两个标志会产生 SyntaxError 。 使用 v 标志,不光可以继承 u 标志所有的功能,还支持以下功能

  • 字符串集合三种集合操作,差异、相交和联合
javascript
       /^[\w--[a-g]]$/v.test('a') // false
 /^[\w--[a-g]]$/v.test('i') // true
/[\p{ASCII}&&\p{Letter}]/v; // ASCII letters
/[[\p{ASCII}&&\p{Letter}]\p{Number}]/v; // ASCII letters, or any digit

    
  • 字符串的属性,允许使用\p 转义的多节点属性
javascript
      "Did you see the 👩🏿‍❤️‍💋‍👩🏾 emoji?".match(/\p{RGI_Emoji}/v). // ["👩🏿‍❤️‍💋‍👩🏾"]

    
  • 集合中的多节点字符串,使用一个新的 \q 转义
javascript
      /[\r\n\q{\r\n|NEWLINE}]/v; // Matches \r, \n, \r\n or NEWLINE

    

4. ArrayBuffer 动态调整与转移

转移 ArrayBuffer 所有权并调整大小,避免数据复制开销,高效处理二进制数据流(如 WebSocket 通信)

  • resize():动态调整缓冲区大小(需预定义 maxByteLength)。
  • transfer():零拷贝转移所有权,提升大内存操作效率。
javascript
      const buffer = new ArrayBuffer(8, { maxByteLength: 16 });
buffer.resize(12); // 扩容至 12 字节
const newBuffer = buffer.transfer(); // 原 buffer 分离

    

总结

ECMAScript 2024(ES15)带来了许多令人兴奋的新特性,毫无疑问地将改变你编写 JavaScript 的方式。从增强的模式匹配和资源管理到更好的错误处理和模块加载,这些补充使得 JavaScript 更加强大、高效,也更友好。

评论区
评论区寄了

文章目录

核心特性
1. Promise.withResolvers()
2. 数据分组方法
3. 正则表达式
4. ArrayBuffer 动态调整与转移
总结