ECMAScript 2024(ES15)
2025-02-20 20:00
2025-02-23 14:33
核心特性
1. Promise.withResolvers()
Promise.withResolvers()
提供了一种创建我们想要解决的 Promise 的新方法:
const { promise, resolve, reject } = Promise.withResolvers();
2. 数据分组方法
Map.groupBy()
将可迭代对象分组为一个新的 Map,Map 中的 key 由回调提供Object.groupBy()
将可迭代对象分组为一个新的对象,对象中的 key 由回调提供
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 标志所有的功能,还支持以下功能
- 字符串集合三种集合操作,差异、相交和联合
/^[\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 转义的多节点属性
"Did you see the 👩🏿❤️💋👩🏾 emoji?".match(/\p{RGI_Emoji}/v). // ["👩🏿❤️💋👩🏾"]
- 集合中的多节点字符串,使用一个新的 \q 转义
/[\r\n\q{\r\n|NEWLINE}]/v; // Matches \r, \n, \r\n or NEWLINE
4. ArrayBuffer 动态调整与转移
转移 ArrayBuffer
所有权并调整大小,避免数据复制开销,高效处理二进制数据流(如 WebSocket 通信)
resize()
:动态调整缓冲区大小(需预定义maxByteLength
)。transfer()
:零拷贝转移所有权,提升大内存操作效率。
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 动态调整与转移
总结