25. for 循環區別

1. 基本 for 循環

for (let i = 0; i < 10; i++) {console.log(i);
}

特點:

  • 適用于已知循環次數的情況
  • 使用數字索引進行迭代
  • 可以精確控制循環過程
  • 性能最好,開銷最小

2. for…in 循環

// 數組示例
for (let i in [1, 2, 3]) {console.log(i, typeof i); // 輸出 "0 string", "1 string", "2 string"
}// 對象示例
for (let i in { a: 1, b: 2 }) {console.log(i, typeof i); // 輸出 "a string", "b string"
}

特點:

  • 遍歷對象的可枚舉屬性鍵(包括繼承的屬性)
  • 返回的是屬性鍵(字符串類型)
  • 對于數組,遍歷的是索引
  • 對于對象,遍歷的是屬性名
  • 會遍歷原型鏈上的可枚舉屬性

3. for…of 循環(補充)

// 數組示例
for (let value of [1, 2, 3]) {console.log(value); // 輸出 1, 2, 3
}// 對象不能直接使用 for...of(除非是可迭代對象)
for (let [key, value] of Object.entries({ a: 1, b: 2 })) {console.log(key, value); // 輸出 "a 1", "b 2"
}

詳細對比

數組遍歷對比

const arr = ["a", "b", "c"];
arr.customProperty = "custom";// 基本 for 循環
for (let i = 0; i < arr.length; i++) {console.log(i, arr[i]); // 0 'a', 1 'b', 2 'c'
}// for...in 循環
for (let i in arr) {console.log(i, arr[i]); // "0" "a", "1" "b", "2" "c", "customProperty" "custom"
}// for...of 循環
for (let value of arr) {console.log(value); // "a", "b", "c"
}

對象遍歷對比

const obj = { a: 1, b: 2, c: 3 };// 基本 for 循環不能直接用于對象// for...in 循環
for (let key in obj) {console.log(key, obj[key]); // "a" 1, "b" 2, "c" 3
}// for...of 需要配合 Object.keys/values/entries
for (let key of Object.keys(obj)) {console.log(key, obj[key]); // "a" 1, "b" 2, "c" 3
}

性能對比

const largeArray = new Array(1000000).fill(0).map((_, i) => i);// 基本 for 循環 - 最快
console.time("for loop");
for (let i = 0; i < largeArray.length; i++) {// 處理 largeArray[i]
}
console.timeEnd("for loop");// for...in 循環 - 較慢
console.time("for...in loop");
for (let i in largeArray) {// 處理 largeArray[i]
}
console.timeEnd("for...in loop");// for...of 循環 - 中等
console.time("for...of loop");
for (let value of largeArray) {// 處理 value
}
console.timeEnd("for...of loop");

使用場景建議

何時使用基本 for 循環

// 1. 需要索引值
for (let i = 0; i < array.length; i++) {console.log(`Index: ${i}, Value: ${array[i]}`);
}// 2. 需要反向遍歷
for (let i = array.length - 1; i >= 0; i--) {console.log(array[i]);
}// 3. 需要跳過某些元素
for (let i = 0; i < array.length; i += 2) {console.log(array[i]);
}

何時使用 for…in

// 1. 遍歷對象屬性
const config = { theme: "dark", lang: "en", version: "1.0" };
for (let key in config) {if (config.hasOwnProperty(key)) {// 避免遍歷原型屬性console.log(`${key}: ${config[key]}`);}
}// 2. 需要屬性名而非值
for (let index in array) {console.log(`Array index: ${index}`);
}

何時使用 for…of

// 1. 只關心值而不關心索引
for (let value of array) {console.log(value);
}// 2. 遍歷其他可迭代對象
for (let char of "hello") {console.log(char); // "h", "e", "l", "l", "o"
}// 3. 遍歷 Map 和 Set
const map = new Map([["a", 1],["b", 2],
]);
for (let [key, value] of map) {console.log(key, value);
}

注意事項

for…in 的陷阱

Array.prototype.extraMethod = function () {};const arr = [1, 2, 3];// for...in 會遍歷到原型方法
for (let i in arr) {console.log(i, arr[i]); // 會輸出 "extraMethod" function
}// 解決方案:使用 hasOwnProperty 檢查
for (let i in arr) {if (arr.hasOwnProperty(i)) {console.log(i, arr[i]); // 只輸出數組索引}
}

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

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

相關文章

Trae 輔助下的 uni-app 跨端小程序工程化開發實踐分享

大家好&#xff0c;我是不如摸魚去&#xff0c;歡迎來到我的AI編程分享專欄。 這次來分享一下&#xff0c;我使用 Trae 作為主要AI編程工具&#xff0c;開發 uni-app 跨平臺小程序的完整實踐經驗。我在實際的開發過程中&#xff0c;探索了 Trae 輔助開發的具體應用場景和效果&…

Vue3 + Element Plus 人員列表搜索功能實現

設計思路使用Element Plus的el-table組件展示人員數據 在姓名表頭添加搜索圖標按鈕 點擊按鈕彈出搜索對話框 在對話框中輸入姓名進行搜索 實現搜索功能并高亮匹配項下面是完整的實現代碼&#xff1a;<!DOCTYPE html> <html lang"zh-CN"> <head><…

告別手動優化!React Compiler 自動記憶化技術深度解析

概述 React Compiler 是 React 團隊開發的一個全新編譯器&#xff0c;目前處于 RC&#xff08;Release Candidate&#xff09;階段。這是一個僅在構建時使用的工具&#xff0c;可以自動優化 React 應用程序&#xff0c;無需重寫任何代碼即可使用。 核心特性 自動記憶化優化 …

【從零開始學習Redis】項目實戰-黑馬點評D2

商戶查詢緩存 為什么用緩存&#xff1f;作用模型緩存流程按照流程編寫代碼如下 Service public class ShopServiceImpl extends ServiceImpl<ShopMapper, Shop> implements IShopService {Resourceprivate StringRedisTemplate stringRedisTemplate;Overridepublic Resul…

后端Web實戰-MySQL數據庫

目錄 1.MySQL概述 1.1 安裝 1.1.1 版本 1.1.2 安裝 1.1.3 連接 1.2 數據模型 1.3 SQL簡介 1.3.1 分類 1.3.2 SQL通用語法 2.DDL 2.1 數據庫操作 2.2 圖形化工具 2.2.1 使用 2.3 表操作 2.3.1 創建表 2.3.1.1約束 2.3.1.2 數據類型 2.3.1.3 案例 2.3.2 DDL&am…

開源數據發現平臺:Amundsen 本地環境安裝

Amundsen 是一個數據發現和元數據引擎&#xff0c;旨在提高數據分析師、數據科學家和工程師與數據交互時的生產力。目前&#xff0c;它通過索引數據資源&#xff08;表格、儀表板、數據流等&#xff09;并基于使用模式&#xff08;例如&#xff0c;查詢頻率高的表格會優先于查詢…

ubuntu18.04部署cephfs

比起君子訥于言而敏于行&#xff0c;我更喜歡君子善于言且敏于行。 目錄 一. 準備工作&#xff08;所有節點&#xff09; 1. /etc/hosts 2. 安裝python2 3. 配置普戶免密sudo 4. 準備好四塊盤&#xff0c;一塊hddsdd為一組&#xff0c;一臺設備上有一組 5. 添加源 二. 安…

VMD+皮爾遜+降噪+重構(送報告+PPT)Matlab程序

1.程序介紹:以含白噪聲信號為例&#xff1a;1.對信號進行VMD分解2.通過皮爾遜進行相關性計算3.通過設定閾值將噪聲分量和非噪聲分量分別提取出4.對非噪聲信號進行重構達到降噪效果包含評價指標&#xff1a;% SNR&#xff1a;信噪比% MSE&#xff1a;均方誤差% NCC&#xff1a;波…

UE5多人MOBA+GAS 45、制作沖刺技能

文章目錄添加技能需要的東西添加本地播放GC添加沖刺tag添加一個新的TA用于檢測敵方單位添加沖刺GA到角色中監聽加速移動速度的回調創建蒙太奇添加GE添加到數據表中添加到角色中糾錯添加技能需要的東西 添加本地播放GC 在UCAbilitySystemStatics中添加 /*** 在本地觸發指定的游…

分庫分表和sql的進階用法總結

說下你對分庫分表的理解分庫分表是?種常?的數據庫?平擴展&#xff08;Scale Out&#xff09;技術&#xff0c;?于解決單?數據庫性能瓶頸和存儲容量限制的問題。在分庫分表中&#xff0c;數據庫會根據某種規則將數據分散存儲在多個數據庫實例和表中&#xff0c;從?提?數據…

紫金橋RealSCADA:國產工業大腦,智造安全基石

在工業4.0時代&#xff0c;數字化轉型已成為企業提升競爭力的核心路徑。作為工業信息化的基石&#xff0c;監控組態軟件在智能制造、物聯網、大數據等領域發揮著關鍵作用。紫金橋軟件積極響應國家“兩化融合”戰略&#xff0c;依托多年技術積淀與行業經驗&#xff0c;重磅推出跨…

朗空量子與 Anolis OS 完成適配,龍蜥獲得抗量子安全能力

近日&#xff0c;蘇州朗空后量子科技有限公司&#xff08;以下簡稱“朗空量子”&#xff09;簽署了 CLA&#xff08;Contributor License Agreement&#xff0c;貢獻者許可協議&#xff09;&#xff0c;加入龍蜥社區&#xff08;OpenAnolis&#xff09;。 朗空量子是一家后量子…

C#WPF實戰出真汁08--【消費開單】--餐桌面板展示

1、功能介紹在這節里&#xff0c;需要實現餐桌類型展示&#xff0c;類型點擊切換事件&#xff0c;餐桌面板展示功能&#xff0c;細節很多&#xff0c;流程是UI設計布局-》后臺業務邏輯-》視圖模型綁定-》運行測試2、UI設計布局TabControl&#xff0c;StackPanel&#xff0c;Gri…

2025年機械制造、機器人與計算機工程國際會議(MMRCE 2025)

&#x1f916;&#x1f3ed;&#x1f4bb; 探索未來&#xff1a;機械制造、機器人與計算機工程的交匯點——2025年機械制造、機器人與計算機工程國際會議&#x1f31f;MMRCE 2025將匯聚全球頂尖專家、學者及行業領袖&#xff0c;聚焦機械制造、機器人和計算機工程領域的前沿議題…

Vue Router 嵌套路由與布局系統詳解:從新手到精通

在Vue單頁應用開發中&#xff0c;理解Vue Router的嵌套路由機制是構建現代管理后臺的關鍵。本文將通過實際案例&#xff0c;深入淺出地解釋Vue Router如何實現布局與內容的分離&#xff0c;以及<router-view>的嵌套渲染原理。什么是嵌套路由&#xff1f;嵌套路由是Vue Ro…

Grafana 與 InfluxDB 可視化深度集成(二)

四、案例實操&#xff1a;以服務器性能監控為例 4.1 模擬數據生成 為了更直觀地展示 Grafana 與 InfluxDB 的集成效果&#xff0c;我們通過 Python 腳本模擬生成服務器性能相關的時間序列數據。以下是一個簡單的 Python 腳本示例&#xff0c;用于生成 CPU 使用率和內存使用量…

.net印刷線路板進銷存PCB材料ERP財務軟件庫存貿易生產企業管理系統

# 印刷線路板進銷存PCB材料ERP財務軟件庫存貿易生產企業管理系統 # 開發背景 本軟件原為給蘇州某企業開發的pcb ERP管理軟件&#xff0c;后來在2021年深圳某pcb 板材公司買了我們的軟件然后在此基礎上按他行業的需求多次修改后的軟件&#xff0c;適合pcb板材行業使用。 # 功能…

基于飛算JavaAI的可視化數據分析集成系統項目實踐:從需求到落地的全流程解析

引言&#xff1a;為什么需要“可視化AI”的數據分析系統&#xff1f; 在數字化轉型浪潮中&#xff0c;企業/團隊每天產生海量數據&#xff08;如用戶行為日志、銷售記錄、設備傳感器數據等&#xff09;&#xff0c;但傳統數據分析存在三大痛點&#xff1a; 技術門檻高&#xff…

MqSQL中的《快照讀》和《當前讀》

目錄 1、MySQL讀取定義 1.1、鎖的分類 1.2、快照讀與當前讀 1.3、使用場景 1.4、區別 2、實現機制 2.1、實現原理 2.2、隔離級別和快照聯系 1、隔離級別 2、快照讀 2.3、快照何時生成 3、SQL場景實現 3.1、快照讀 3.2、當前讀 4、鎖的細節&#xff08;與當前讀相…

【Docker項目實戰】使用Docker部署Notepad輕量級記事本

【Docker項目實戰】使用Docker部署Notepad輕量級記事本一、 Notepad介紹1.1 Notepad簡介1.2 Notepad特點1.3 主要使用場景二、本次實踐規劃2.1 本地環境規劃2.2 本次實踐介紹三、本地環境檢查3.1 檢查Docker服務狀態3.2 檢查Docker版本3.3 檢查docker compose 版本四、下載Note…