Ecma International批准了ECMAScript 2024:有什么新变化?

原文信息: 查看原文查看原文

Ecma International approves ECMAScript 2024: What’s new?

- Dr. Axel Rauschmayer

在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代码单元方面格式正确:

Atomics.waitAsync()

Atomics.waitAsync()允许我们异步等待共享内存的变化。有关更多信息,请参阅MDN Web Docs

免费的ECMAScript 2024书籍

我的书《Exploring JavaScript(ES2024版)》可以在线免费阅读。两个章节尤其相关:

分享于 2024-07-01

访问量 28

预览图片