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