JavaScript 循環方法對比指南

JavaScript 循環方法對比指南


1. 標準 for 循環

語法:

for (let i = 0; i < arr.length; i++) {console.log(arr[i]);
}

優點

? 完全控制索引,適合需要精確控制遍歷順序或步長的場景。
? 性能最優,在超大規模數據遍歷時比高階方法(如 forEach)更快。
? 支持 break、continue、return,可靈活控制循環流程。

缺點

? 代碼較冗長,需要手動管理索引。
? 不適用于對象遍歷(除非結合 Object.keys())。

適用場景

  • 需要基于索引的操作(如逆序遍歷、間隔遍歷)
  • 性能敏感的場景(如大數據量處理)

2. for…in 循環

語法:

for (const key in obj) {console.log(key, obj[key]);
}

優點

? 可遍歷對象的所有可枚舉屬性(包括原型鏈上的屬性)
? 適用于普通對象的鍵值遍歷

缺點

? 不推薦用于數組,因為會遍歷非數字鍵和原型鏈屬性
? 遍歷順序不確定(尤其在涉及繼承屬性時)
? 無法直接獲取值,需通過 obj[key] 訪問

適用場景

  • 遍歷普通對象的屬性(需配合 hasOwnProperty 檢查)
  • 調試時快速查看對象結構

改進方案

for (const key in obj) {if (obj.hasOwnProperty(key)) {  // 過濾原型鏈屬性console.log(key, obj[key]);
}

3. for…of 循環

語法:

for (const item of iterable) {console.log(item);
}

優點

? 直接遍歷值,無需手動索引或鍵名
? 支持所有可迭代對象(數組、字符串、Map、Set 等)
? 支持 break、continue、return
? 代碼簡潔易讀,是"增強 for 循環"的最佳實踐

缺點

? 不能直接遍歷普通對象(需先轉換為數組,如 Object.entries(obj))

適用場景

  • 數組或可迭代對象的遍歷(推薦替代 forEach)
  • 需要提前終止循環的場景(如查找第一個符合條件的元素)

示例

const arr = [1, 2, 3];
for (const num of arr) {if (num === 2) break;  // 支持 breakconsole.log(num);      // 輸出 1
}

4. Array.prototype.forEach

語法:

arr.forEach((item, index) => {console.log(item, index);
});

優點

? 函數式編程風格,鏈式調用方便(如結合 map、filter)
? 無需手動管理索引

缺點

? 無法中斷循環(不支持 break 或 return)
? 性能略低于 for 或 for…of(尤其在大數據量時)
? 不適用于異步操作(除非配合 async/await 的特殊處理)

適用場景

  • 簡單遍歷數組且無需中斷邏輯
  • 與其他高階函數(如 map、filter)組合使用

不適用場景

// 錯誤示例:嘗試用 forEach 中斷循環
arr.forEach(item => {if (item === 2) break;  // ? 報錯:Illegal break statement
});

5. 其他遍歷方法

方法特點
while / do…while適合條件循環(如讀取流數據),但需手動控制終止條件
for await…of異步遍歷(如遍歷異步生成器或 Promise 數組)
Object.keys() + forEach安全遍歷對象屬性的替代方案(避免 for…in 的原型鏈問題)

6. 總結:如何選擇循環方法

需求推薦方法
遍歷數組且需要中斷for…of 或 for
遍歷對象屬性Object.keys() + forEach 或 for…in(需過濾)
簡單數組遍歷且無需中斷forEach
高性能遍歷(大數據量)標準 for 循環
異步遍歷for await…of

7. 性能對比(僅供參考)

const largeArray = Array(1e6).fill(0);// 1. 標準 for 循環(最快)
for (let i = 0; i < largeArray.length; i++) {}// 2. for...of(次快)
for (const item of largeArray) {}// 3. forEach(較慢)
largeArray.forEach(() => {});

?? 實際性能差異在大多數場景下可忽略,優先考慮代碼可讀性!

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

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

相關文章

【快餐點餐簡易軟件】佳易王快餐店點餐系統軟件功能及操作教程

一、軟件概述與核心優勢 &#xff08;一&#xff09;試用版獲取方式 資源下載路徑&#xff1a;進入博主頭像主頁第一篇文章末尾&#xff0c;點擊卡片按鈕&#xff1b;或訪問左上角博客主頁&#xff0c;通過右側按鈕獲取詳細資料。 說明&#xff1a;下載文件為壓縮包&#xff…

智慧園區數字孿生全鏈交付方案:降本增效30%,多案例實踐驅動全周期交付

在智慧園區建設浪潮中&#xff0c;數字孿生技術正成為破解傳統園區管理難題的核心引擎。通過構建與物理園區1:1映射的數字模型&#xff0c;實現數據集成、狀態同步與智能決策&#xff0c;智慧園區數字孿生全鏈交付方案已在多個項目中驗證其降本增效價值——某物流園區通過該方案…

從0開始學vue:Element Plus詳解

一、核心架構解析二、技術實現指南三、高級特性實現四、性能優化方案五、生態擴展方案六、調試與測試七、版本演進路線 Element Plus 是專為 Vue 3 設計的桌面端 UI 組件庫&#xff0c;基于 Vue 3 的 Composition API 重構&#xff0c;在保持與 Element UI 兼容性的同時&#x…

Ubuntu系統配置C++的boost庫(含filesystem模塊)的方法

本文介紹在具有sudo權限的Ubuntu操作系統中&#xff0c;配置C 的boost庫的方法。 boost庫是一個廣受歡迎的C 庫集合&#xff0c;提供了許多強大的功能擴展——例如其中的filesystem模塊&#xff0c;可簡化文件和目錄操作&#xff0c;讓開發者可以輕松處理跨平臺的文件系統任務。…

Java集合中Stream流的使用

前言 Java 8 引入了 Stream API&#xff0c;它是一種用于處理集合&#xff08;Collection&#xff09;數據的強大工具。Stream 不是數據結構&#xff0c;而是對數據源進行操作的一種方式&#xff0c;支持聲明式、函數式的操作&#xff0c;如過濾、映射、排序等。 Stream 操作…

.Net Framework 4/C# 屬性和方法

一、屬性的概述 屬性是對實體特征的抽象&#xff0c;用于提供對類或對象的訪問&#xff0c;C# 中的屬性具有訪問器&#xff0c;這些訪問器指定在它們的值被讀取或寫入時需要執行的語句&#xff0c;因此屬性提供了一種機制&#xff0c;用于把讀取和寫入對象的某些特征與一些操作…

asp.net mvc如何簡化控制器邏輯

在ASP.NET MVC中&#xff0c;可以通過以下方法簡化控制器邏輯&#xff1a; ASP.NET——MVC編程_aspnet mvc-CSDN博客 .NET/ASP.NET MVC Controller 控制器&#xff08;IController控制器的創建過程&#xff09; https://cloud.tencent.com/developer/article/1015115 【轉載…

flask功能使用總結和完整示例

Flask 功能使用總結與完整示例 一、Flask 核心功能總結 Flask 是輕量級 Web 框架&#xff0c;核心功能包括&#xff1a; 路由系統&#xff1a;通過 app.route 裝飾器定義 URL 與函數的映射。模板引擎&#xff1a;默認使用 Jinja2&#xff0c;支持動態渲染 HTML。請求處理&…

HarmonyOS應用基礎階段- 09、綜合案例-仿攜程旅行口碑榜

文章目錄 攜程-口碑榜1、banner 區域1.1 區域部分1.2 口碑榜 Logo1.3 推薦榜單1.4 評分規則1.5 底部 Line 2、選擇城市和目的地2.1 區域布局2.2 選擇城市2.3 口碑目的地 3、商業選項菜單4、熱門項目選項4.1 區域布局4.2 熱門標題4.3 選項 5、熱門榜標題6、熱門景點列表6.1 區域…

中小制造企業轉型:低成本國產工業軟件替代方案實踐

在數字經濟浪潮席卷全球的當下&#xff0c;制造業數字化轉型已成為企業提升競爭力、實現可持續發展的必由之路。然而&#xff0c;高昂的成本與復雜的技術門檻&#xff0c;卻讓眾多中小制造企業陷入 “不能轉、不想轉、不會轉、不敢轉” 的困局。幸運的是&#xff0c;一批具有自…

Kafka 核心架構與消息模型深度解析(二)

案例實戰&#xff1a;Kafka 在實際場景中的應用 &#xff08;一&#xff09;案例背景與需求介紹 假設我們正在為一個大型電商平臺構建數據處理系統。該電商平臺擁有龐大的用戶群體&#xff0c;每天會產生海量的訂單數據、用戶行為數據&#xff08;如瀏覽、點擊、收藏等&#…

【iOS】cache_t分析

前言 之前分析類的結構的時候&#xff0c;有遇到一個cache_t&#xff0c;當時說是用來保存方法緩存的結構&#xff0c;這篇文章來從源碼詳細介紹一下cache_t 概覽cache_t cache_t結構 類在底層的結構如之前所述&#xff0c;存在著cache_t屬性&#xff0c;而cache_t的結構如下…

java面試題:List如何排序?內存溢出/OOM怎么回事?如何排查和解決?

List如何排序 List排序可以通過實現Comparable接口并且實現compareTo方法&#xff0c;或者傳入comparator去實現排序。 內存溢出/OOM是怎么回事&#xff1f; 內存溢出就是程序在運行的過程中&#xff0c;申請的內存超過了最大內存限制&#xff0c;導致JVM拋出OOM異常&#x…

Python cryptography【密碼庫】庫功能與使用指南

邊寫代碼零食不停口 盼盼麥香雞味塊 、卡樂比&#xff08;Calbee&#xff09;薯條三兄弟 獨立小包、好時kisses多口味巧克力糖、老金磨方【黑金系列】黑芝麻丸 邊寫代碼邊貼面膜 事業美麗兩不誤 DR. YS 野森博士【AOUFSE/澳芙雪特證】377專研美白淡斑面膜組合 優惠劵 別光顧寫…

第二十四章 流程控制_ if分支

第二十四章 流程控制: if分支和輸入 正如許多編程語言一樣Shell也有自己的條件分支語句。有時需要根據情況進行相應的處理&#xff0c;因此可以通過條件分支語句實現&#xff0c;本章主要介紹的是if分支語句。 if語句 在Shell中if語句語法格式如下&#xff1a; if commands…

電腦網絡重置,找不到原先自家的WIFI,手機還能正常連接并上網

問題排查&#xff1a;1、電腦感覺網絡太慢&#xff0c;因此打算點擊了網絡重置 2、點擊提示會刪除網絡&#xff0c;在五分鐘后關機重啟 3、從設備管理器設備的無線wifi屬性-事件中發現刪除記錄 4、選擇更新驅動程序 5、從列表中選取 6、更改回老驅動版本 備選方案&#…

C語言_預處理詳解

1. 預定義符號 C語言設置了一些預定義符號&#xff0c;可以直接使用&#xff0c;預定義符號也是在預處理期間處理的 1 __FILE__ //進行編譯的源文件 2 __LINE__//文件當前的行號 3 __DATE__ //文件被編譯的日期 4 __TIME__//文件被編譯的時間 5 __STDC__//如果編譯器遵循ANSI…

【QT】使用QT幫助手冊找控件樣式

選擇幫助—》輸入stylesheet(小寫)—》選擇stylesheet—》右側選擇Qt Style Sheets Reference 2.使用CtrlF—》輸入要搜索的控件—》點擊Customizing QScrollBar 3.顯示參考樣式表–》即可放入QT-designer的樣式表中

SQL知識合集(二):函數篇

TRIM函數 作用&#xff1a;去掉字符串前后的空格 SELECT * FROM your_table_name WHERE TRIM(column_name) ; COALESCE函數 作用&#xff1a;返回其參數中的第一個非 NULL 值。它可以接受多個參數&#xff0c;并從左到右依次評估這些參數&#xff0c;直到找到第一個非 NUL…

Cursor 工具項目構建指南: Uniapp Miniprogram 環境下的 Prompt Rules 約束

簡簡單單 Online zuozuo: 簡簡單單 Online zuozuo 簡簡單單 Online zuozuo 簡簡單單 Online zuozuo 簡簡單單 Online zuozuo :本心、輸入輸出、結果 簡簡單單 Online zuozuo : 文章目錄 Cursor 工具項目構建指南: Uniapp Miniprogram 環境下的 Prompt Rules 約束前言項目簡…