ES15 中最具變革性的五個 JavaScript 特性
隨著 ES15 和有前途的提案的推出,JS 功能有了全新的升級。從復雜的異步功能到語法數組糖和現代正則表達式,JavaScript 編碼變得比以往任何時候都更容易、更快捷。
1. 原生數組分組功能現已推出
Object.groupBy():
從字面上理解,這是讓dinosaur Lodash 存活下來的唯一東西 — — 不再存在了!
我原本期望有一個新的實例方法,如 Array.prototype.groupBy,但不知出于什么原因,他們把它變成了靜態的。
然后我們用 Map.groupBy 來用對象鍵進行分組:
不過,幾乎沒有人會以這種方式對數組進行分組,因此這種做法可能不那么受歡迎。
2. 從外部解決承諾 — 現代方式
使用 Promise.withResolvers()。
從外部解決承諾很普遍,以前我們必須使用 Deferred 類來完成此操作:
或者從 NPM 安裝 — — 還有一個依賴項!
但是現在有了 ES15 中的 Promise.withResolvers():
看看我如何快速承諾事件流 — — 等待可觀察的:
3. 緩沖區性能升級
緩沖區是用于存儲應用生成的臨時數據的微型數據存儲。
它們使在管道中跨各個階段傳輸和處理數據變得非常容易。
管道如下:
文件處理:輸入文件 → 緩沖區 → 處理 → 新緩沖區 → 輸出文件
視頻流:網絡響應 → 緩沖區 → 顯示視頻幀
餐廳排隊:接待顧客 → 排隊/緩沖 → 服務顧客
使用緩沖區,每個階段以不同的速度獨立處理數據。
但是,當通過管道的數據超過緩沖區容量時會發生什么?
以前我們必須將當前數據的所有緩沖區復制到更大的緩沖區。
這對性能影響很大,尤其是當管道中有大量數據時。
ES15 為我們提供了解決此問題的方法:可調整大小的數組緩沖區。
4. 異步升級
Atomics.waitAsync():ES2024 中另一個強大的異步編碼功能:
當 2 個代理共享一個緩沖區時……
代理 1“休眠”并等待代理 2 完成任務。
當代理 2 完成后,它會使用共享緩沖區作為通道進行通知。
如果您認為這與普通的 async/await 類似,那您就完全正確了。
但最大的區別在于:這兩個代理可以存在于完全不同的代碼上下文中 — 它們只需要訪問同一個緩沖區。
并且:多個代理可以在不同時間訪問或等待共享緩沖區 — 其中任何一個都可以通知“喚醒”所有其他代理。
它就像一個 P2P 網絡;async/await 就像客戶端-服務器請求-響應。
5. 正則表達式與標志和集合操作
一項全新功能,使正則表達式更加簡潔直觀。
使用富有表現力的模式查找和操作復雜字符串 — 借助集合操作:
匹配不斷增加的 Unicode 字符集,例如:
表情符號:??、??、??、?? 等。
重音字母:é、à、?、? 等。
符號和非拉丁字符:?、?、€、£、μ、¥ 等
因此,我們在這里使用 Unicode 正則表達式和 v 標志來匹配所有希臘字母:
寫在最后的想法
總體而言,這對于 JavaScript 來說是一次重大飛躍,具有現代開發所必需的幾項功能。
幫助您編寫更簡潔、更具表現力和更清晰的更干凈的代碼。