7月23日、海外のエンジニア向けメディア「THENEWSTACK」が「What’s New for JavaScript Developers in ECMAScript 2024」と題した記事を公開した。この記事では、ECMAScript 2024の新機能について詳しく紹介されている。
以下に、その内容を紹介する。
![](https://res.cloudinary.com/techfeed/image/upload/v1721769778/entries/okauns6nsusfvryoy9pz.png)
ECMAScript 2024の新機能
WebAssemblyの相互運用性向上
ECMAScript 2024では、JavaScriptとWebAssembly間の相互運用性が大幅に改善された。Resizable ArrayBuffersの導入により、WebAssemblyのメモリが成長しても、JavaScript側で効率的にアクセスできるようになった。これにより、メモリの再割り当てや断片化の問題が解消される。
// Resizable ArrayBuffersの例
let buffer = new ArrayBuffer(1024, { maxByteLength: 2048 });
let view = new Uint8Array(buffer);
console.log(view.length); // 1024
buffer.resize(2048);
view = new Uint8Array(buffer);
console.log(view.length); // 2048
プロミスの改善
プロミスはJavaScriptでの非同期処理を簡素化する強力なツールだが、その使い勝手には課題があった。ECMAScript 2024では、Promise.withResolversメソッドが追加され、プロミスの解決関数に直接アクセスできるようになった。
// Promise.withResolversの例
const { promise, resolve, reject } = Promise.withResolvers();
promise.then((value) => {
console.log("Resolved with:", value);
}).catch((error) => {
console.error("Rejected with:", error);
});
// 任意のタイミングで解決または拒否を行う
resolve("Success");
// reject("Error");
文字列と正規表現の強化
新しい/vフラグにより、正規表現でのUnicodeセットの扱いが改善された。これにより、より直感的で強力な文字列操作が可能となり、国際化対応や多様性のサポートが容易になる。
// /vフラグの例
const regex = /\p{Script=Greek}/v;
console.log(regex.test('π')); // true
console.log(regex.test('p')); // false
Array.groupBy()
配列にグルーピングの機能が追加され、オブジェクトを特定のプロパティに基づいて分類することができる。これは、データの整理や分析に非常に役立つ機能である。
// Array.groupByの例
const items = [
{ name: 'apple', color: 'red' },
{ name: 'banana', color: 'yellow' },
{ name: 'grape', color: 'purple' },
{ name: 'cherry', color: 'red' },
];
const groupedByColor = items.groupBy(item => item.color);
console.log(groupedByColor);
// {
// red: [{ name: 'apple', color: 'red' }, { name: 'cherry', color: 'red' }],
// yellow: [{ name: 'banana', color: 'yellow' }],
// purple: [{ name: 'grape', color: 'purple' }]
// }
マルチスレッドと非同期処理の改善
Atomics.waitAsyncが導入され、マルチスレッド環境での待機操作がより効率的になった。これにより、メインスレッドをブロックすることなく、非同期処理を実行できるようになる。
// Atomics.waitAsyncの例
// メインスレッドをブロックしない待機操作
const sharedBuffer = new SharedArrayBuffer(1024);
const int32 = new Int32Array(sharedBuffer);
(async () => {
const result = await Atomics.waitAsync(int32, 0, 0);
console.log(result); // 'ok', 'not-equal' or 'timed-out'
})();
Unicode処理の改善
新しいisWellFormedメソッドと.toWellFormedメソッドにより、JavaScriptの文字列が正しいUTF-16エンコードかどうかをチェックし、必要に応じて修正することができる。
// isWellFormedとtoWellFormedの例
const malformedString = 'a\uD800b';
console.log(malformedString.isWellFormed()); // false
const wellFormedString = malformedString.toWellFormed();
console.log(wellFormedString); // 'a�b'
console.log(wellFormedString.isWellFormed()); // true
ECMAScript 2024の新機能により、JavaScriptはさらに使いやすくなり、開発者の生産性が向上することが期待される。特に、非同期処理やマルチスレッド環境でのパフォーマンスが大幅に向上することが注目される。
詳細はWhat’s New for JavaScript Developers in ECMAScript 2024を参照していただきたい。