在2024年6月26日,第127届Ecma大会批准了ECMAScript 2024语言规范,这意味着它现在正式成为一个标准。
ECMAScript 2024的编辑者
本次发布的编辑者是:
- 郭书羽
- Michael Ficarra
- Kevin Gibbons
ECMAScript 2024的新特性
分组同步迭代器
Map.groupBy()
将可迭代对象的项分组为键由回调函数提供的Map条目:
assert.deepEqual(
Map.groupBy([0, -5, 3, -4, 8, 9], x => Math.sign(x)),
new Map()
.set(0, [0])
.set(-1, [-5,-4])
.set(1, [3,8,9])
);
还有Object.groupBy()
,它生成一个对象而不是Map:
assert.deepEqual(
Object.groupBy([0, -5, 3, -4, 8, 9], x => Math.sign(x)),
{
'0': [0],
'-1': [-5,-4],
'1': [3,8,9],
__proto__: null,
}
);
关于如何在这两种方法之间选择以及更多示例,请参阅《Exploring JavaScript》。
Promise.withResolvers()
Promise.withResolvers()
提供了一种创建我们希望解决的Promise的新方法:
const { promise, resolve, reject } = Promise.withResolvers();
正则表达式标志 /v
新的正则表达式标志 /v
(.unicodeSets
) 启用了以下功能:
Unicode字符串属性的转义(😵💫由三个代码点组成):
// 以前:通过/u的Unicode代码点属性 `Emoji` assert.equal( /^\p{Emoji}$/u.test('😵💫'), false ); // 新的:通过/v的Unicode字符串属性 `RGI_Emoji` assert.equal( /^\p{RGI_Emoji}$/v.test('😵💫'), true );
字符类中的字符串字面量通过
\q{}
:> /^[\q{😵💫}]$/v.test('😵💫') true > /^[\q{abc|def}]$/v.test('abc') true
字符类的集合操作:
> /^[\w--[a-g]]$/v.test('a') false > /^[\p{Number}--[0-9]]$/v.test('٣') true > /^[\p{RGI_Emoji}--\q{😵💫}]$/v.test('😵💫') false
如果通过
[^···]
否定Unicode属性转义,使用/i
时的匹配改进
ArrayBuffers和SharedArrayBuffers的新特性
ArrayBuffers有两个新特性:
它们可以就地调整大小:
const buf = new ArrayBuffer(2, {maxByteLength: 4}); // `typedArray`从偏移量2开始 const typedArray = new Uint8Array(buf, 2); assert.equal( typedArray.length, 0 ); buf.resize(4); assert.equal( typedArray.length, 2 );
它们获得了一个方法
.transfer()
用于传输它们。
SharedArrayBuffers可以调整大小,但只能增长,不能缩小。它们不可传输,因此不会获得ArrayBuffers获得的.transfer()
方法。
确保字符串格式正确
两个新方法帮助我们确保字符串在UTF-16代码单元方面格式正确:
- String方法
.isWellFormed()
检查JavaScript字符串是否格式正确且不包含任何独立代理。 - String方法
.toWellFormed()
返回接收者的副本,其中每个独立代理都被替换为代码单元0xFFFD(代表相同数字的代码点,其名称为“替换字符”)。因此结果是格式正确的。
Atomics.waitAsync()
Atomics.waitAsync()
允许我们异步等待共享内存的变化。有关更多信息,请参阅MDN Web Docs。
免费的ECMAScript 2024书籍
我的书《Exploring JavaScript(ES2024版)》可以在线免费阅读。两个章节尤其相关:
- 《JavaScript的历史和演变》:ECMAScript vs. JavaScript,TC39,TC39流程,ECMAScript提案等。
- 《新的JavaScript特性》:每个ECMAScript版本的新特性是什么?