ECMAScript 2018(ES2018):異步編程與正則表達式的深度進化

1.版本背景與發布

  • 發布時間:2018年6月,由ECMA International正式發布,標準編號為ECMA-262 9th Edition。
  • 歷史意義:作為ES6之后的第三次年度更新,ES2018聚焦于異步編程、正則表達式和對象操作的標準化,推動JavaScript向更高效、更易用的方向發展。
  • 時代背景:隨著Node.js和前端框架的普及,開發者對異步流程控制、正則功能及對象操作的便捷性提出更高要求,ES2018的發布回應了這些需求。

2.核心特性(重塑異步與文本處理)

異步迭代器(Asynchronous Iteration)

引入Symbol.asyncIterator,支持通過for await...of循環遍歷異步數據源(如Promise數組)。

const asyncGenerator = async function*() { for (let i = 0; i < 5; i++) { await new Promise(r => setTimeout(r, 1000)); yield i; } }; 
(async () => { for await (const value of asyncGenerator()) { console.log(value); // 依次輸出0-4,間隔1秒 
} })();

Promise.prototype.finally()

無論Promise狀態如何,finally()中的代碼都會執行,常用于清理操作。

fetchData() .then(data => process(data)) .catch(err => handleError(err)) .finally(() => hideLoading()); // 無論成功/失敗都會執行

正則表達式擴展

后行斷言(?<=exp)(?<!exp)支持匹配位置前的內容。

命名捕獲組(?<name>...)允許通過名稱引用匹配結果。
DotAll模式/./s匹配任意字符(包括換行符)。
Unicode屬性轉義\p{Script=Greek}匹配特定Unicode字符集。

const regex = /(?<currency>\$)(?<amount>\d+\.\d{2})/; 
const match = regex.exec('$19.99'); 
console.log(match.groups.currency); 
// '$' console.log(match.groups.amount); 
// '19.99'

Rest/Spread屬性擴展

對象展開{ ...obj1, ...obj2 }合并對象屬性。
對象剩余const { a, ...rest } = obj提取剩余屬性。

const obj1 = { a: 1, b: 2 }; 
const obj2 = { ...obj1, b: 3 }; 
// { a:1, b:3 } const { a, ...rest } = obj2; 
// rest = { b:3 }

3.關鍵突破與影響

1.異步編程范式升級

  • 異步迭代器與for await...of結合,使異步操作更直觀,減少回調地獄。
  • 推動異步框架(如RxJS)的普及,簡化復雜異步邏輯。

2.正則表達式能力提升

  • 命名捕獲組和Unicode支持簡化復雜模式匹配,提升代碼可維護性。
  • DotAll模式解決換行符匹配痛點,優化文本處理場景。

3.對象操作標準化

  • Rest/Spread屬性統一數組與對象的操作方式,促進函數式編程實踐。
  • 替代Object.assign(),減少樣板代碼。

4.開發者視角

1.學習價值

  • 掌握異步迭代器是理解現代異步框架(如RxJS)的基礎。
  • 正則表達式擴展對日志解析、表單驗證等場景至關重要。

2.工具鏈兼容性

  • 所有現代瀏覽器(Chrome 63+、Firefox 57+、Safari 11.1+)及Node.js 10+支持ES2018。
  • 舊環境可通過Babel轉譯,結合@babel/preset-env自動引入所需插件。

3.面試考點

  • “解釋Promise.finally()的用途?”
  • “如何使用命名捕獲組提取正則表達式中的數據?”

5.總結

ES2018通過異步迭代器、正則表達式擴展和對象操作優化,鞏固了JavaScript在異步編程和文本處理領域的地位。其特性不僅簡化了復雜邏輯的實現,還為后續版本(如ES2019的Array.flat()、ES2020的Optional Chaining)奠定了基礎。理解ES2018,是掌握現代JavaScript異步流程控制與正則表達式應用的關鍵一步。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/81425.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/81425.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/81425.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【C語言】鏈接與編譯(編譯環境 )

前言&#xff1a; 在前面講解文件操作&#xff0c;了解了文件的類別&#xff0c;文件的打開與關閉&#xff0c;字符讀寫函數&#xff0c; 字符串讀寫函數&#xff0c;格式化輸入輸出函數 在C語言編程中&#xff0c;編譯與鏈接是將源代碼轉化為可執行程序的關鍵步驟。為了詳細…

Java視頻流RTMP/RTSP協議解析與實戰代碼

在Java中實現視頻直播的輸入流處理&#xff0c;通常需要結合網絡編程、多媒體處理庫以及流媒體協議&#xff08;如RTMP、HLS、RTSP等&#xff09;。以下是實現視頻直播輸入流的關鍵步驟和技術要點&#xff1a; 1. 視頻直播輸入流的核心組件 網絡輸入流&#xff1a;通過Socket或…

系分論文《論系統需求分析方法及應用》

系統分析師論文范文系列 【摘要】 2022年6月&#xff0c;我作為系統分析師參與了某金融機構“智能信貸風控系統”的建設項目。該系統旨在通過對業務流程的數字化重構&#xff0c;優化信貸審批效率并降低風險。項目涉及信貸申請、資質審核、風險評估、額度審批等核心流程&#x…

stack和queue簡單模擬實現

stackreverse_iteratorqueuepriority_queue仿函數具體代碼 stack Stacks are a type of container adaptor, specifically designed to operate in a LIFO context (last-in first-out), where elements are inserted and extracted only from one end of the container. 上述描…

Linux內核可配置的參數

sysctl -a 命令會列出當前Linux內核所有可配置的參數及其當前值。這些參數允許你在系統運行時動態地調整內核的行為&#xff0c;而無需重新編譯內核或重啟系統。 內容非常多&#xff0c;因為內核有很多可調的方面。我們可以把它們大致分為幾個主要類別&#xff1a; kernel.*: …

【背包dp-----分組背包】------(標準的分組背包【可以不裝滿的 最大價值】)

通天之分組背包 題目鏈接 題目描述 自 01 01 01 背包問世之后&#xff0c;小 A 對此深感興趣。一天&#xff0c;小 A 去遠游&#xff0c;卻發現他的背包不同于 01 01 01 背包&#xff0c;他的物品大致可分為 k k k 組&#xff0c;每組中的物品相互沖突&#xff0c;現在&a…

操作系統:os概述

操作系統&#xff1a;OS概述 程序、進程與線程無極二級目錄三級目錄 程序、進程與線程 指令執行需要那些條件&#xff1f;CPU內存 需要數據和 無極 二級目錄 三級目錄

RAG文本分塊

不論是向量化模型還是大語言模型&#xff0c;都存在輸入長度的限制。對于超過限制的文本&#xff0c;模型會進行截斷&#xff0c;造成語義缺失。分塊可以確保每個文本片段都在模型的處理范圍內&#xff0c;避免重要信息的丟失。 文本分塊的核心原則 高質量分塊的核心原則是&a…

2025 年九江市第二十三屆中職學校技能大賽 (網絡安全)賽項競賽樣題

2025 年九江市第二十三屆中職學校技能大賽 &#xff08;網絡安全&#xff09;賽項競賽樣題 &#xff08;二&#xff09;A 模塊基礎設施設置/安全加固&#xff08;200 分&#xff09;A-1 任務一登錄安全加固&#xff08;Windows,Linux&#xff09;A-2 任務二 Nginx 安全策略&…

量子隧穿:PROFINET到Ethernet ip的無損耗協議轉換方案轉

在本季度的生產工作中&#xff0c;我們成功實現了倉儲物流自動化分揀系統中的關鍵技術突破。我們面臨的主要挑戰是將采用EtherNet/IP協議的輸送帶控制器與PROFINET協議的上位系統進行有效通信。通過引入ethernet IP轉PROFINET網關倍訊科技BX-606-EIP&#xff0c;我們實現了輸送…

OpenCV CUDA模塊中矩陣操作------降維操作

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 cv::cuda::reduce 函數用于對 GPU 上的矩陣沿某個維度進行降維操作&#xff0c;例如求和、取最大值等。此函數支持多種降維操作&#xff0c;并允…

一分鐘用 MCP 上線一個 貪吃蛇 小游戲(CodeBuddy版)

我正在參加CodeBuddy「首席試玩官」內容創作大賽&#xff0c;本文所使用的 CodeBuddy 免費下載鏈接&#xff1a;騰訊云代碼助手 CodeBuddy - AI 時代的智能編程伙伴 你好&#xff0c;我是悟空。 背景 上篇我們用 MCP 上線了一個 2048 小游戲&#xff0c;這次我們繼續做一個 …

簡單神經網絡(ANN)實現:從零開始構建第一個模型

本文將手把手帶你用 Python Numpy 實現一個最基礎的人工神經網絡&#xff08;Artificial Neural Network, ANN&#xff09;。不依賴任何深度學習框架&#xff0c;適合入門理解神經網絡的本質。 一、項目目標 構建一個三層神經網絡&#xff08;輸入層、隱藏層、輸出層&#xf…

使用python進行人員軌跡跟蹤

一、系統概述 該系統基于計算機視覺技術&#xff0c;實現對視頻或攝像頭畫面中的人員進行檢測、跟蹤&#xff0c;并生成軌跡數據。支持透視變換校準&#xff08;鳥瞰圖顯示&#xff09;、多目標跟蹤、軌跡存儲及視頻錄制功能&#xff0c;適用于安防監控、行為分析等場景。 二…

[強化學習的數學原理—趙世鈺老師]學習筆記02-貝爾曼方程

本人為強化學習小白&#xff0c;為了在后續科研的過程中能夠較好的結合強化學習來做相關研究&#xff0c;特意買了西湖大學趙世鈺老師撰寫的《強化學習數學原理》中文版這本書&#xff0c;并結合趙老師的講解視頻來學習和更深刻的理解強化學習相關概念&#xff0c;知識和算法技…

Docker入門指南:鏡像、容器與倉庫的核心概念解析

目錄 前言&#xff1a;為什么需要Docker&#xff1f; 一、Docker能做什么&#xff1f; 二、核心概念解析 1. 鏡像&#xff08;Image&#xff09;&#xff1a;應用的標準化打包 2. 容器&#xff08;Container&#xff09;&#xff1a;鏡像的運行實例 3. 鏡像倉庫&#xff0…

大模型微調實戰:基于GpuGeek平臺的低成本高效訓練方案

文章目錄 引言一、GpuGeek平臺使用入門1. 注冊與賬號設置2. 控制臺功能概覽3. 快速創建GPU實例3. 預置鏡像與自定義環境 二、GpuGeek平臺核心優勢解析1. 顯卡資源充足&#xff1a;多卡并行加速訓練2. 鏡像超多&#xff1a;開箱即用的開發環境3. 計費靈活&#xff1a;按需付費降…

Linux:計算機的層狀結構

1.馮諾依曼體系結構 我們常見的計算機&#xff0c;如筆記本、臺式機。我們不常見的計算機&#xff0c;如服務器&#xff0c;大部分都遵守馮諾依曼體系結構。 CPU&#xff1a;運算器和控制器組成。運算器主要工作是做算術運算和邏輯運算。控制器主要工作是協調設備之間信息流動的…

LangGraph(四)——加入人機交互控制

目錄 1. 引言2. 添加Human Assistance工具3. 編譯狀態圖4. 提示聊天機器人5. 恢復執行參考 1. 引言 智能體可能不可靠&#xff0c;甚至需要人工輸入才能完成任務。同樣&#xff0c;對于某些操作&#xff0c;你可能需要在運行前獲得人工批準&#xff0c;以保證一切按預期運行。 …

數據結構【AVL樹】

AVL樹 1.AVL樹1.AVL的概念2.平衡因子 2.AVl樹的實現2.1AVL樹的結構2.2AVL樹的插入2.3 旋轉2.3.1 旋轉的原則 1.AVL樹 1.AVL的概念 AVL樹可以是一個空樹。 它的左右子樹都是AVL樹&#xff0c;且左右子樹的高度差的絕對值不超過1。AVL樹是一顆高度平衡搜索二叉樹&#xff0c;通…