ECMAScript 2024
ECMAScript 2024(ES15)于 2024 年 6 月发布。
核心特性
1. Promise.withResolvers()
异步控制增强
,允许直接创建 Promise 并获取其 resolve
和 reject
函数,适用于需要手动控制异步结果的场景。
javascript
const { promise, resolve } = Promise.withResolvers();
setTimeout(() => resolve("操作成功"), 1000);
await promise; // 输出:"操作成功"
2. 数据分组方法
Object.groupBy()
与 Map.groupBy()
按条件对数组元素分组,返回普通对象或 Map 对象,简化数据聚合逻辑。
javascript
const users = [
{ name: "Alice", role: "admin" },
{ name: "Bob", role: "user" },
];
const grouped = Object.groupBy(users, (user) => user.role);
// 输出:{ admin: [Alice...], user: [Bob...] }
场景:数据聚合、分类统计。
注意
:Object.groupBy 返回无原型的对象,无法调用 hasOwnProperty 等方法。
3. 正则表达式 v
标志
增强 Unicode 支持
,支持集合操作(差集 --
、交集 &&
)和多节点字符匹配。
javascript
const re = /[\p{Letter}&&\p{ASCII}]+/v;
re.test("Hello"); // true(仅匹配 ASCII 字母)
4. 字符串格式校验与修复
检测并修复无效 Unicode 字符。
String.prototype.isWellFormed()
:检测字符串是否有效。String.prototype.toWellFormed()
:将无效字符替换为 �(U+FFFD)。
javascript
const str = "Hello\uD800World";
str.isWellFormed(); // false
str.toWellFormed(); // "Hello�World"
5. ArrayBuffer
动态调整与转移
优化二进制数据处理性能。用于音视频处理、WebAssembly 交互。
resize()
:动态调整缓冲区大小(需预定义maxByteLength
)。transfer()
:零拷贝转移所有权,提升大内存操作效率。
javascript
const buffer = new ArrayBuffer(8, { maxByteLength: 16 });
buffer.resize(12); // 扩容至 12 字节
const newBuffer = buffer.transfer(); // 原 buffer 分离
6. Atomics.waitAsync()
异步共享内存等待
,非阻塞等待 SharedArrayBuffer
的值变化,避免主线程冻结。
javascript
const sab = new SharedArrayBuffer(1024);
const int32 = new Int32Array(sab);
const { promise } = Atomics.waitAsync(int32, 0, 0);
Atomics.notify(int32, 0); // 触发解决
await promise;
场景:多线程协作(Web Worker)、高性能计算。
7. 顶层 await
允许在模块顶层直接使用 await,简化异步初始化逻辑。
javascript
// 模块中直接使用
const data = await fetchData();
export default data;
8. Hashbang 语法标准化
支持在脚本文件首行使用 #!/usr/bin/env node,兼容 Node.js 直接执行。
javascript
#!/usr/bin/env node
console.log("Hello World");
兼容性
Chrome 127+
Firefox 128+
Safari 18.0+
Edge 127+
Node 21.0+
注:兼容性数据可能随着版本的更新而有所调整,建议开发者根据项目的具体需求参考最新的浏览器版本和 Polyfill 支持情况。
总结
ES2024 聚焦于 异步控制、数据处理 和 内存优化。
参考文献