2024 年 6 月 26 日,第 127 屆 Ecma 大會批准了 ECMAScript 2024 語言規範,這意味着它現在正式成為標準。
https://github.com/tc39/ecma262/releases
1. Group By 分組
Map.groupBy() 將可迭代對象分組為一個新的 Map,Map中的 key由回調提供:
Map.groupBy([0, -5, 3, -4, 8, 9], x => Math.sign(x))
還有 Object.groupBy() 生成一個 對象 而不是 Map
Object.groupBy([0, -5, 3, -4, 8, 9], x => Math.sign(x))
Math.sign() 方法用於判斷一個數的符號,即正負性
兼容性
2. Promise.withResolvers
Promise.withResolvers() 提供了一種創建我們想要解決的 Promise 的新方法:
const { promise, resolve, reject } = Promise.withResolvers();
兼容性
3. 正則表達式標誌 /v
如果使用 v 標誌, RegExp.prototype.unicodeSets 的值為 true ;否則, false 。
v 標誌是 u 標誌的“升級”,可啓用更多與 Unicode 相關的功能。 (“v”是字母表中“u”之後的下一個字母。)由於 u 和 v 以不兼容的方式解釋相同的正則表達式,因此使用這兩個標誌會產生 SyntaxError 。
使用 v 標誌,不光可以繼承 u 標誌所有的功能,還支持以下功能:
-
字符串集合三種集合操作,差異、相交和聯合
/^[\w--[a-g]]$/v.test('a') // false /^[\w--[a-g]]$/v.test('i') // true /[\p{ASCII}&&\p{Letter}]/v; // ASCII letters /[[\p{ASCII}&&\p{Letter}]\p{Number}]/v; // ASCII letters, or any digit -
字符串的屬性,允許使用\p 轉義的多節點屬性
"Did you see the 👩🏿❤️💋👩🏾 emoji?".match(/\p{RGI_Emoji}/v). // ["👩🏿❤️💋👩🏾"] -
集合中的多節點字符串,使用一個新的
\q轉義/[\r\n\q{\r\n|NEWLINE}]/v; // Matches \r, \n, \r\n or NEWLINEv模式代碼示例參考
4. ArrayBuffers 和 SharedArrayBuffers 的新功能
4.1 ArrayBuffers 就地調整大小
> const buf = new ArrayBuffer(2, { maxByteLength: 32 });
> buf.byteLength
> 2
> buf.resize(12)
> buf.byteLength
> 12
不允許超過預先定義的maxByteLength,resize可增大也可以減小
4.2 ArrayBuffers .transfer() 可轉移
原先也是可以進行轉移的,之前是通過參數進行配置的,現在對外提供了一個 transfer 函數調用,更加方便了
const original = new ArrayBuffer(16);
const transferred = original.transfer();
detached屬性是一個訪問器屬性,其 set 訪問器函數是undefined,這意味着你只能讀取此屬性。該屬性的值在創建ArrayBuffer時設置為false。如果ArrayBuffer已被傳輸,則該值將變為true,這將使該實例從其底層內存中分離。一旦緩衝區被分離,它就不再可用。
4.3 SharedArrayBuffers
SharedArrayBuffers 可以調整大小,但它們只能增長而不能縮小。它們不可轉移,因此無法獲取 ArrayBuffers 所獲取的方法 .transfer() 。
5 新增了兩個確保字符串格式正確的函數
5.1 String.prototype.isWellFormed
isWellFormed() 讓你能夠測試一個字符串是否是格式正確的(即不包含單獨代理項)。
“單獨代理項(lone surrogate)”是指滿足以下描述之一的 16 位碼元:
它在範圍 0xD800 到 0xDBFF 內(含)(即為前導代理),但它是字符串中的最後一個碼元,或者下一個碼元不是後尾代理。
它在範圍 0xDC00 到 0xDFFF 內(含)(即為後尾代理),但它是字符串中的第一個碼元,或者前一個碼元不是前導代理。
const strings = [
// 單獨的前導代理
"ab\uD800",
"ab\uD800c",
// 單獨的後尾代理
"\uDFFFab",
"c\uDFFFab",
// 格式正確
"abc",
"ab\uD83D\uDE04c",
];
for (const str of strings) {
console.log(str.isWellFormed());
}
// 輸出:
// false
// false
// false
// false
// true
// true
5.2 String.prototype.toWellFormed
String">String 的 toWellFormed() 方法返回一個字符串,其中該字符串的所有單獨代理項都被替換為 Unicode 替換字符 U+FFFD。
const strings = [
// 單獨的前導代理
"ab\uD800",
"ab\uD800c",
// 單獨的後尾代理
"\uDFFFab",
"c\uDFFFab",
// 格式正確
"abc",
"ab\uD83D\uDE04c",
];
for (const str of strings) {
console.log(str.toWellFormed());
}
// Logs:
// "ab�"
// "ab�c"
// "�ab"
// "c�ab"
// "abc"
// "ab😄c"
6. Atomics.waitAsync()
Atomics.waitAsync() 靜態方法異步等待共享內存的特定位置並返回一個 Promise">Promise。
與 Atomics.wait( "Atomics.wait(">Atomics.wait()")") 不同,waitAsync 是非阻塞的且可用於主線程。
結語
以上就是 ECMAScript 2024 (ES15) 標準發佈的主要內容,如果對你有幫助的話,歡迎點贊👍、關注➕、轉發