"ES15版JavaScript大躍進:五大新特性改變你的編程體驗"

閱讀時間約 7 分鐘

前段時間,JavaScript推出了ES15(ECMAScript 2024)版本,帶來了一系列令人振奮的新特性。作為一名資深JavaScript開發者,我第一時間深入研究了這些新功能,並在實際項目中進行了應用。讓我們一起來看看這些新特性如何改變我們的日常編程體驗。


1. 數組分組功能Object.groupBy()


在處理大量數據時,我們經常需要對數組進行分組操作。以往,我們可能需要使用lodash等第三方庫來實現這一功能。現在,ES15直接提供了原生的Object.groupBy()方法,使得分組操作變得異常簡單。


舉個例子,假設我們有一個學生成績數組:


```javascript

const students = [

{ name: '張三', grade: 'A' },

{ name: '李四', grade: 'B' },

{ name: '王五', grade: 'A' },

{ name: '趙六', grade: 'C' }

];


const groupedByGrade = Object.groupBy(students, student => student.grade);

console.log(groupedByGrade);

```


輸出結果將會是:


```javascript

{

A: [{ name: '張三', grade: 'A' }, { name: '王五', grade: 'A' }],

B: [{ name: '李四', grade: 'B' }],

C: [{ name: '趙六', grade: 'C' }]

}

```


這個新特性大大簡化了我們的代碼,提高了開發效率。


2. Promise.withResolvers():更優雅的Promise處理


在處理異步操作時,我們經常需要在外部解析Promise。ES15引入的Promise.withResolvers()方法為我們提供了一種更優雅的方式來處理這種情況。


看一個實際的例子:


```javascript

function createAsyncTask() {

const { promise, resolve, reject } = Promise.withResolvers();

// 模擬異步操作

setTimeout(() => {

const success = Math.random() > 0.5;

if (success) {

resolve('任務完成');

} else {

reject('任務失敗');

}

}, 1000);


return promise;

}


async function runTask() {

try {

const result = await createAsyncTask();

console.log(result);

} catch (error) {

console.error(error);

}

}


runTask();

```


這種方式使得我們可以更靈活地控制Promise的解析過程,同時保持代碼的清晰度。


3. 可調整大小的ArrayBuffer


在處理大量二進制數據時,ArrayBuffer的固定大小限制一直是一個痛點。ES15引入了可調整大小的ArrayBuffer,這對於處理動態大小的數據流來說是一個巨大的改進。


```javascript

const buffer = new ArrayBuffer(10, { maxByteLength: 100 });

console.log(buffer.byteLength); // 10


buffer.resize(50);

console.log(buffer.byteLength); // 50

```


這個特性在處理音視頻流或大文件上傳時特別有用,可以動態調整緩衝區大小,提高內存使用效率。


4. Atomics.waitAsync():強大的異步同步工具


Atomics.waitAsync()為我們提供了一種在不同上下文間進行異步同步的新方法。這在處理Web Workers或跨窗口通信時特別有用。


```javascript

const sharedBuffer = new SharedArrayBuffer(4);

const int32 = new Int32Array(sharedBuffer);


Atomics.waitAsync(int32, 0, 0).then(() => {

console.log('值已更新');

});


// 在另一個上下文中

Atomics.store(int32, 0, 1);

Atomics.notify(int32, 0);

```


這個特性使得我們可以更好地協調多線程或多窗口間的操作,提高應用的整體性能。


5. 正則表達式的v標誌和集合操作


ES15為正則表達式引入了v標誌,並支持集合操作,這大大增強了正則表達式的功能。


```javascript

const greekLetters = /\p{Script=Greek}/v;

console.log(greekLetters.test('α')); // true

console.log(greekLetters.test('A')); // false


const notDigits = /[^\p{Decimal_Number}]/v;

console.log(notDigits.test('A')); // true

console.log(notDigits.test('1')); // false

```


這個特性使得我們可以更精確地處理Unicode字符,特別是在處理多語言文本時非常有用。


總的來說,ES15為JavaScript帶來了一系列強大而實用的新特性。這些特性不僅提高了我們的開發效率,還為解決一些長期存在的問題提供了優雅的解決方案。作為開發者,我們應該積極學習和應用這些新特性,以寫出更加簡潔、高效的代碼。


如果你想深入了解ES15的所有新特性,我推薦你查看ECMAScript官方文檔(https://tc39.es/ecma262/)。同時,也建議在實際項目中逐步引入這些新特性,體驗它們帶來的便利。讓我們一起擁抱JavaScript的未來,創造更加美好的Web世界!

avatar-img
0會員
18內容數
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
小罗LA的沙龍 的其他內容
近年來,機器學習和深度學習技術在金融交易領域取得了驚人的進展。本文將深入探討如何利用卷積神經網絡(CNN)模型在加密貨幣市場實現驚人的9,883%回報率。 卷積神經網絡原本是為處理圖像和視頻等網格型數據而設計的,但其強大的特徵提取能力使其同樣適用於時間序列數據分析。在加密貨幣交易中,CNN可以
人工智能(AI)已成為當今科技領域的焦點,它不僅改變了我們的生活方式,還挑戰著我們對智能本質的理解。然而,AI背後的核心並非神秘的魔法,而是建立在堅實的數學基礎之上。本文將帶您深入探索AI的數學本質,揭示其強大能力背後的原理,以及目前面臨的挑戰和局限性。 機器學習(ML)是當前AI的主要形式。
在這個資訊爆炸的時代,如何讓自己的品牌在茫茫競爭中脫穎而出,成為每個企業家和行銷人員的心頭大患。我們都知道,好的工具可以事半功倍。今天,就讓我們一起來探索五款鮮為人知但極具潛力的營銷利器,它們將幫助你在這場營銷大戰中贏得先機。 「工欲善其事,必先利其器」。這句古語在當今數位營銀領域依然適用。讓
深度學習領域中,對比學習(Contrastive Learning)近年來受到越來越多關注。它能夠在無標籤數據上學習到有效的特徵表示,為下游任務提供強大支持。本文將以FashionMNIST數據集為例,介紹如何實現一個基於SimSiam的對比學習模型,並與傳統監督學習方法進行對比。 首先來看F
在大語言模型(LLM)應用中,檢索增強生成(RAG)技術已成為提升回答品質的關鍵。然而,簡單的RAG往往無法滿足複雜場景的需求。本文將深入剖析4種進階RAG演算法,並結合LLM twin系統的實際案例,探討如何優化檢索效果。 一、查詢擴展:擴大語義覆蓋範圍 傳統RAG僅使用單一向量查詢,容易
在人工智能和機器學習領域,有一類演算法借鑒了生物進化的智慧,它就是遺傳演算法。這種演算法通過模擬自然選擇和遺傳的過程,能夠在龐大的解空間中找到接近最優的解決方案。今天,我們就來深入探討遺傳演算法的原理、應用場景,以及如何用Python實現一個簡單的遺傳演算法。 遺傳演算法的核心思想來自於達爾文
近年來,機器學習和深度學習技術在金融交易領域取得了驚人的進展。本文將深入探討如何利用卷積神經網絡(CNN)模型在加密貨幣市場實現驚人的9,883%回報率。 卷積神經網絡原本是為處理圖像和視頻等網格型數據而設計的,但其強大的特徵提取能力使其同樣適用於時間序列數據分析。在加密貨幣交易中,CNN可以
人工智能(AI)已成為當今科技領域的焦點,它不僅改變了我們的生活方式,還挑戰著我們對智能本質的理解。然而,AI背後的核心並非神秘的魔法,而是建立在堅實的數學基礎之上。本文將帶您深入探索AI的數學本質,揭示其強大能力背後的原理,以及目前面臨的挑戰和局限性。 機器學習(ML)是當前AI的主要形式。
在這個資訊爆炸的時代,如何讓自己的品牌在茫茫競爭中脫穎而出,成為每個企業家和行銷人員的心頭大患。我們都知道,好的工具可以事半功倍。今天,就讓我們一起來探索五款鮮為人知但極具潛力的營銷利器,它們將幫助你在這場營銷大戰中贏得先機。 「工欲善其事,必先利其器」。這句古語在當今數位營銀領域依然適用。讓
深度學習領域中,對比學習(Contrastive Learning)近年來受到越來越多關注。它能夠在無標籤數據上學習到有效的特徵表示,為下游任務提供強大支持。本文將以FashionMNIST數據集為例,介紹如何實現一個基於SimSiam的對比學習模型,並與傳統監督學習方法進行對比。 首先來看F
在大語言模型(LLM)應用中,檢索增強生成(RAG)技術已成為提升回答品質的關鍵。然而,簡單的RAG往往無法滿足複雜場景的需求。本文將深入剖析4種進階RAG演算法,並結合LLM twin系統的實際案例,探討如何優化檢索效果。 一、查詢擴展:擴大語義覆蓋範圍 傳統RAG僅使用單一向量查詢,容易
在人工智能和機器學習領域,有一類演算法借鑒了生物進化的智慧,它就是遺傳演算法。這種演算法通過模擬自然選擇和遺傳的過程,能夠在龐大的解空間中找到接近最優的解決方案。今天,我們就來深入探討遺傳演算法的原理、應用場景,以及如何用Python實現一個簡單的遺傳演算法。 遺傳演算法的核心思想來自於達爾文
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
先學習 HTML, CSS, JavaScript 基礎觀念, 再透過實作專案,慢慢熟悉不同的語法使用方式。
Thumbnail
JSDoc 全名是 JavaScript Documentation,顧名思義是為 JavaScript 所使用的 API 文件,在程式碼內透過註解的方式撰寫,運行後 JSDoc 會自動掃描註解內容,並生成一份網頁版的文件,對於沒有使用 Typescript 開發的專案,也
Thumbnail
一般在使用 TypeScript 的時候,大家都有遇過定義列舉資料的情境吧。 不過不管是 enum 和 literal 的方式其實都有些小缺點,以下推薦一個個人認為體驗更好的方式。
Thumbnail
本章節旨在介紹TypeScript的基本語法,包括一般結構、程式進入點、註解以及變數的定義和賦值。這些知識將幫助讀者瞭解TypeScript的基本架構,並且可以開始使用TypeScript進行開發。
Thumbnail
TypeScript是一種由Microsoft開發和維護的開源編程語言。它是JavaScript的超集,主要擴展了JavaScript的語法,增加了靜態類型檢查和其他特性,使得開發大型應用程序更為方便和可靠。
Thumbnail
因為最近想嘗試編碼風格,於是就選了一套比較"不嚴格"的輔助工具來摸索。 編輯器 VS CODE 框架 VUE3 打包工具 VITE 編碼風格 Standard 環境 version { "nodejs":"v18.18.0", "npm":"9.8.1" }
Thumbnail
本章節旨在介紹JavaScript中的物件導向編程。內容包括類別(Class)的定義和使用,建構子的作用,以及公開,私有,受保護(Protected)等不同訪問修飾符的概念。此外,還涵蓋了繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda表達式、泛型、反射等物件導向的主要觀念。
Thumbnail
在網頁開發中,時間與日期的處理是重要且基礎的部分,本文將介紹 JavaScript 中的日期的處理方法,並提供範例程式來協助你理解。
Thumbnail
在剛開始寫 JavaScript 可能大多數的人不會特別意識到 JavaScript 的型別系統有什麼特別之處,我是在看完 Youtube 上 CS50 的課程,才理解到在不同的程式語言中,會因為語言的特性而有不同的系統,JavaScript 就是偏向比較特別的那一種。
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
先學習 HTML, CSS, JavaScript 基礎觀念, 再透過實作專案,慢慢熟悉不同的語法使用方式。
Thumbnail
JSDoc 全名是 JavaScript Documentation,顧名思義是為 JavaScript 所使用的 API 文件,在程式碼內透過註解的方式撰寫,運行後 JSDoc 會自動掃描註解內容,並生成一份網頁版的文件,對於沒有使用 Typescript 開發的專案,也
Thumbnail
一般在使用 TypeScript 的時候,大家都有遇過定義列舉資料的情境吧。 不過不管是 enum 和 literal 的方式其實都有些小缺點,以下推薦一個個人認為體驗更好的方式。
Thumbnail
本章節旨在介紹TypeScript的基本語法,包括一般結構、程式進入點、註解以及變數的定義和賦值。這些知識將幫助讀者瞭解TypeScript的基本架構,並且可以開始使用TypeScript進行開發。
Thumbnail
TypeScript是一種由Microsoft開發和維護的開源編程語言。它是JavaScript的超集,主要擴展了JavaScript的語法,增加了靜態類型檢查和其他特性,使得開發大型應用程序更為方便和可靠。
Thumbnail
因為最近想嘗試編碼風格,於是就選了一套比較"不嚴格"的輔助工具來摸索。 編輯器 VS CODE 框架 VUE3 打包工具 VITE 編碼風格 Standard 環境 version { "nodejs":"v18.18.0", "npm":"9.8.1" }
Thumbnail
本章節旨在介紹JavaScript中的物件導向編程。內容包括類別(Class)的定義和使用,建構子的作用,以及公開,私有,受保護(Protected)等不同訪問修飾符的概念。此外,還涵蓋了繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda表達式、泛型、反射等物件導向的主要觀念。
Thumbnail
在網頁開發中,時間與日期的處理是重要且基礎的部分,本文將介紹 JavaScript 中的日期的處理方法,並提供範例程式來協助你理解。
Thumbnail
在剛開始寫 JavaScript 可能大多數的人不會特別意識到 JavaScript 的型別系統有什麼特別之處,我是在看完 Youtube 上 CS50 的課程,才理解到在不同的程式語言中,會因為語言的特性而有不同的系統,JavaScript 就是偏向比較特別的那一種。