ECMAScript 2024(ES15) 新特性完全解析

科技   2024-09-01 13:37   北京  
关注下方公众号,获取更多热点资讯

ECMAScript 语言规范的开发始于1996年11月。Ecma 标准的第一个版本于 1997 年 6 月的 Ecma 大会上被采纳。

ECMAScript 2024 语言是 ECMAScript 语言规范的第 15 个版本。自 1997 年第一版发布以来,ECMAScript 已经发展成为世界上使用最广泛的通用编程语言之一。它最为人所知的是作为嵌入在网络浏览器中的语言,但也已经广泛地被用于服务器和嵌入式应用。

ECMAScript 2024 引入了许多新的特性,提高了二进制数据管理、字符串操作以及异步操作处理的能力。这些变更于 2024 年 6 月 26 日获得批准,旨在使 JavaScript 更强大、更灵活。

下面就来深入了解 ES2024 的一些新特性。

Object.groupBy 和 Map.groupBy 方法

新的 Object.groupBy 和 Map.groupBy 方法提供了一种高效聚合数据的方法。这些方法允许开发人员根据指定的标准对Array或 Map 中的元素进行分组,从而简化了数据操作和聚合任务。

let array = [1.22.33.44.5];
let groupedByFloor = array.groupBy(Math.floor);
// Output: {1: [1.2], 2: [2.3], 3: [3.4], 4: [4.5]}
console.log(groupedByFloor);

const persons = new Map([
  ['male'10],
  ['female'20],
  ['unknown'10]
]);

const groupedByAge = Map.groupBy(persons, ([, age]) => age);
// Map {
//   10 => Map { 'male' => 10, 'unknown' => 10 },
//   20 => Map { 'female' => 20 }
// }
console.log(groupedByAge);

ArrayBuffer 和 SharedArrayBuffer 的扩展

在 ECMAScript 2024 中,对 ArrayBuffer 进行了扩展,并增加了 SharedArrayBuffer 的构造函数。有了这些扩展,开发者可以就地调整缓冲区的大小,甚至无需复制数据即可传输缓冲区,从而在处理二进制信息时高效利用内存。

const buffer = new ArrayBuffer(8, { maxByteLength16 });

console.log(buffer.byteLength);
// Expected output: 8

buffer.resize(12);

console.log(buffer.byteLength);
// Expected output: 12

Promise.withResolvers

Promise.withResolvers 方法提供了一种静态方法,可返回 promise、resolve 和 reject函数,从而简化了 promise 的创建和管理。该功能对于更高效地处理异步操作。

const { promise, resolve, reject } = Promise.withResolvers();
resolve('ok');
// Output: ok
promise.then(console.log);

Promise.withResolvers() 与下方代码等价:

let resolve, reject;
const promise = new Promise((res, rej) => {
  resolve = res;
  reject = rej;
});

使用 Promise.withResolvers() 的好处在于,解析和拒绝函数现在与 promise 本身处于同一作用域,而不是在执行器中创建和使用一次。这可能会带来一些更高级的用例,例如在重复使用它们处理重复事件时,尤其是在处理流和队列时。与在执行器中封装大量逻辑相比,这通常也能减少嵌套。

Atomics.waitAsync

Atomics.waitAsync 方法是 ECMAScript 2024 的另一项重要新增功能,它提供了一种异步等待共享内存变化的机制。这种功能在不允许阻塞的环境(如web worker)中尤其有用。

let sharedBuffer = new SharedArrayBuffer(1024);
let int32 = new Int32Array(sharedBuffer);
Atomics.waitAsync(int32, 00).value.then(() => {
  console.log('Value Changed');
});
Atomics.store(int32, 01);

String.prototype.isWellFormed 和 String.prototype.toWellFormed

ECMAScript 2024 引入了两种处理 Unicode 字符串的新方法:String.prototype.isWellFormedString.prototype.toWellFormed。这些方法可确保字符串是格式良好的 Unicode 序列,从而改进字符串处理和数据完整性。

const malformedString = '\uD800';
// Output: false
console.log(malformedString.isWellFormed());

const wellFormedString = malformedString.toWellFormed();
console.log(wellFormedString);


1.关注FED实验室(前端开发实验室)获取更多前端热点资讯、技术实践、面试招聘等精彩内容。

2.扫描下面二维码,加小懒好友,进全栈开发交流群,一起学习和进步。

大家都在看

  1. Vue 3.5 即将发布,新特性抢先看

  2. Chrome 128 DevTools 新功能速览

  3. 里程碑!Rspack 1.0 正式发布

  4. 2024年前端状态管理工具大盘点

FED实验室
前端开发实验室,专注于前端全栈开发方向,内容覆盖前端热点资讯、工程架构、技术实践、工具资源和前端面试招聘等内容。全网同号。
 最新文章