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.2, 2.3, 3.4, 4.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, { maxByteLength: 16 });console.log(buffer.byteLength);// Expected output: 8buffer.resize(12);console.log(buffer.byteLength);// Expected output: 12Promise.withResolversPromise.withResolvers 方法提供了一种静态方法,可返回 promise、resolve 和 reject函数,从而简化了 promise 的创建和管理。该功能对于更高效地处理异步操作。
const { promise, resolve, reject } = Promise.withResolvers();resolve('ok');// Output: okpromise.then(console.log);Promise.withResolvers() 与下方代码等价:
let resolve, reject;const promise = new Promise((res, rej) => { resolve = res; reject = rej;});使用 Promise.withResolvers() 的好处在于,解析和拒绝函数现在与 promise 本身处于同一作用域,而不是在执行器中创建和使用一次。这可能会带来一些更高级的用例,例如在重复使用它们处理重复事件时,尤其是在处理流和队列时。与在执行器中封装大量逻辑相比,这通常也能减少嵌套。
Atomics.waitAsyncAtomics.waitAsync 方法是 ECMAScript 2024 的另一项重要新增功能,它提供了一种异步等待共享内存变化的机制。这种功能在不允许阻塞的环境(如web worker)中尤其有用。
let sharedBuffer = new SharedArrayBuffer(1024);let int32 = new Int32Array(sharedBuffer);Atomics.waitAsync(int32, 0, 0).value.then(() => { console.log('Value Changed');});Atomics.store(int32, 0, 1);String.prototype.isWellFormed 和 String.prototype.toWellFormedECMAScript 2024 引入了两种处理 Unicode 字符串的新方法:String.prototype.isWellFormed 和String.prototype.toWellFormed。这些方法可确保字符串是格式良好的 Unicode 序列,从而改进字符串处理和数据完整性。
const malformedString = '\uD800';// Output: falseconsole.log(malformedString.isWellFormed());const wellFormedString = malformedString.toWellFormed();console.log(wellFormedString);