动态

详情 返回 返回

快來看看 ECMAScript 2024 (ES15) 發佈了什麼新特性 - 动态 详情

2024 年 6 月 26 日,第 127 屆 Ecma 大會批准了 ECMAScript 2024 語言規範,這意味着它現在正式成為標準。

https://github.com/tc39/ecma262/releases

1. Group By 分組

Map.groupBy()可迭代對象分組為一個新的 MapMap中的 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”之後的下一個字母。)由於 uv 以不兼容的方式解釋相同的正則表達式,因此使用這兩個標誌會產生 SyntaxError

使用 v 標誌,不光可以繼承 u 標誌所有的功能,還支持以下功能:

  1. 字符串集合三種集合操作,差異、相交和聯合

    
     /^[\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
  2. 字符串的屬性,允許使用\p 轉義的多節點屬性

    "Did you see the 👩🏿‍❤️‍💋‍👩🏾 emoji?".match(/\p{RGI_Emoji}/v). // ["👩🏿‍❤️‍💋‍👩🏾"]
  3. 集合中的多節點字符串,使用一個新的 \q 轉義

    /[\r\n\q{\r\n|NEWLINE}]/v; // Matches \r, \n, \r\n or NEWLINE

    v模式代碼示例參考

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">StringtoWellFormed() 方法返回一個字符串,其中該字符串的所有單獨代理項都被替換為 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) 標準發佈的主要內容,如果對你有幫助的話,歡迎點贊👍、關注➕、轉發

user avatar cyzf 头像 Leesz 头像 alibabawenyujishu 头像 smalike 头像 yinzhixiaxue 头像 freeman_tian 头像 front_yue 头像 jingdongkeji 头像 dirackeeko 头像 aqiongbei 头像 littlelyon 头像 zourongle 头像
点赞 171 用户, 点赞了这篇动态!
点赞

Add a new 评论

Some HTML is okay.