for...of的用法與介紹

一、定義

for...of 是 ES6(ECMAScript 2015)引入的一種用于 遍歷可迭代對象(Iterable)的循環語句

二、語法

for (const item of iterable) {// 代碼塊
}

?參數:

  • iterable:一個可迭代對象(如數組、字符串、Set、Map等)。
  • item:當前迭代的值。

三、舉例

const arr = [10, 20, 30];
for (const value of arr) {console.log(value);
}
// 輸出:10, 20, 30
?相比 forEachfor...of 支持 breakcontinue
for (const value of arr) {if (value === 20) continue;console.log(value);
}
// 輸出:10, 30

四、使用

遍歷 Set

Set 是無重復值的集合,for...of 可用于遍歷:

const mySet = new Set(["a", "b", "c"]);
for (const value of mySet) {console.log(value);
}
// 輸出:a, b, c
遍歷 Set

for...of 默認遍歷 Map 的鍵值對:

const myMap = new Map([["name", "Alice"],["age", 25]
]);for (const [key, value] of myMap) {console.log(key, value);
}
// 輸出:name Alice
//       age 25
遍歷 arguments 對象
function test() {for (const arg of arguments) {console.log(arg);}
}
test(1, 2, 3);
// 輸出:1, 2, 3

?五、名詞解釋

1、什么是可迭代對象(Iterable)?

可迭代對象是 實現了 Symbol.iterator 方法 的對象,這意味著它可以被 for...of 遍歷。

常見的可迭代對象:

  • 數組(Array)

  • 字符串(String)

  • Set

  • Map

  • arguments 對象

  • NodeList(DOM API 返回的集合)

  • TypedArray(比如 Uint8Array

  • 生成器(Generator)

比喻:

symbol.iterator 就像書的“書簽功能”?

想象你有一本書這本書就是一個對象,而書簽就是 Symbol.iterator

普通的對象(沒有 Symbol.iterator

就像一本沒有書簽的書,你只能自己翻頁,不知道讀到哪里了,也不能按順序自動閱讀。比如:

const obj = { a: 1, b: 2 }; for (const item of obj) { // ?報錯:obj 不是可迭代對象 console.log(item); }

普通對象 {} 不能直接用 for...of,因為它沒有“書簽功能”

數組(自帶 Symbol.iterator

而數組 []、字符串 "abc"天生帶有書簽功能(Symbol.iterator,你可以一頁一頁順序讀下去

const arr = [10, 20, 30]; for (const num of arr) { console.log(num); // ?輸出 10, 20, 30 }

?數組可以 for...of 遍歷,因為它天生有 Symbol.iterator(書簽功能)

2、arguments 對象是什么?

在 JavaScript 里,arguments 是一個“類數組”對象(array-like object),用來存儲所有傳遞給函數的參數

簡單來說,當你調用一個函數時,所有參數都會被存到 arguments 里,即使你沒有在函數的參數列表中定義它們。

function test() {console.log(arguments); // arguments 是個對象
}test(1, 2, 3, 'hello');
[Arguments] { '0': 1, '1': 2, '2': 3, '3': 'hello' }

從 ES6 開始,arguments 已經不推薦使用,因為它不是數組,很多數組方法不能直接用。
我們應該用剩余參數(Rest 參數) ...args,它會直接生成數組:

注意args是變量名寫什么都行

function test(...args) {for (const arg of args) {console.log(arg);}
}test('a', 'b', 'c');
// 輸出:
// a
// b
// c

?六、實戰

function sum(...nums) {return nums.reduce((a, b) => a + b, 0);
}console.log(sum(10, 20, 30)); // 60
console.log(sum(1, 2, 3, 4, 5)); // 15

就是相當于把傳入的值自動組成一個數組

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

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

相關文章

Faster R-CNN原理詳解以及Pytorch實現模型訓練與推理

《------往期經典推薦------》 一、AI應用軟件開發實戰專欄【鏈接】 項目名稱項目名稱1.【人臉識別與管理系統開發】2.【車牌識別與自動收費管理系統開發】3.【手勢識別系統開發】4.【人臉面部活體檢測系統開發】5.【圖片風格快速遷移軟件開發】6.【人臉表表情識別系統】7.【…

使用dockerfile創建鏡像

1.什么是Dockerfile Dockerfile 是一個用于指導 Docker 鏡像構建過程的腳本文件。它通過一系列指令來詳細描述了構建鏡像所需的步驟和配置細節。利用 Dockerfile,我們可以精確地設定容器的運行環境,安裝必要的軟件,復制項目文件,…

在CentOS系統上安裝Conda的詳細指南

前言 Conda 是一個開源的包管理系統和環境管理系統,廣泛應用于數據科學和機器學習領域。本文將詳細介紹如何在 CentOS 系統上安裝 Conda,幫助您快速搭建開發環境。 準備工作 在開始安裝之前,請確保您的 CentOS 系統已經滿足以下條件&#x…

大腦宏觀結構中的富集俱樂部:圖論分析視角

摘要 大腦是一個高度復雜的網絡。越來越多的證據支持大腦網絡中一組重要腦區的關鍵作用,這些腦區通常被稱為大腦的“核心”或“樞紐”區域。這些區域不僅能量消耗較高,而且在神經信息傳遞方面的效率也極高,因此被稱為“富集俱樂部”。富集俱樂…

Redis7——進階篇(五)

前言:此篇文章系本人學習過程中記錄下來的筆記,里面難免會有不少欠缺的地方,誠心期待大家多多給予指教。 基礎篇: Redis(一)Redis(二)Redis(三)Redis&#x…

Reflect.get和target[key]有何不同?

主要區別在this指向不同,下面輸出張三還是李四?: const person{name:張三,get FullName(){return this.name;},};let personProxynew Proxy(person,{get(target,key){return Reflect.get(target,key)//或者return target[key]}});const p1{__proto__:pe…

rust語言match模式匹配涉及轉移所有權Error Case

struct S{data:String, }//注意:因為String默認是移動語義,從而決定結構體S也是移動語義,可采用(1)或(2)兩種方法解決編譯錯誤;關鍵思路:放棄獲取結構體S的字段data的所有權,改為借用。fn process(s_ref:&a…

光譜相機檢測肉類新鮮度的原理

光譜相機通過分析肉類樣本在特定波長范圍內的光譜反射特性,結合化學與生物指標的變化規律,實現對其新鮮度的無損檢測。其核心原理可概括為以下方面: 一、光譜特征與物質成分的關聯性 ?物質特異性吸收/反射? 不同化學成分(如水分…

c#面試題整理9

1.遍歷xml文檔 2.解釋一下這段 String s new String("xyz"); 這段在C#平臺中,編譯失敗 3.說明一下抽象類 抽象類可以有構造函數 抽象類不能是靜態和密封的類,密封的類表示無法繼承,抽象類本身就不可實例化,加不好…

《React 屬性與狀態江湖:從驗證到表單受控的實戰探險》

屬性初識 屬性能解決兩個大問題&#xff1a;通信和復用 props.js: import React, { Component } from react import Navbar from ./Navbarexport default class App extends Component {state {a:100}render() {return (<div><div><h2>首頁</h2>&l…

Qwen/QwQ-32B 基礎模型上構建agent實現ppt自動生成

關心Qwen/QwQ-32B 性能測試結果可以參考下 https://zhuanlan.zhihu.com/p/28600079208https://zhuanlan.zhihu.com/p/28600079208 官方宣傳上是該模型性能比肩滿血版 DeepSeek-R1&#xff08;671B&#xff09;&#xff01; 我們實現一個 使用Qwen/QwQ-32B 自動生成 PowerPoi…

Javascript基礎語法詳解

面向對象的語言.腳本語言,不需要編譯,瀏覽器解釋即可運行 .用于控制網頁的行為.瀏覽器的source可以打斷點調試, console輸入代碼可以執行 use strict指令: 在“嚴格模式”下運行js代碼, 防止意外創建全局變量等, 提高代碼安全性和執行效率. 使用: 全局嚴格模式&#xff1a;…

[雜學筆記] TCP和UDP的區別,對http接口解釋 , Cookie和Session的區別 ,http和https的區別 , 智能指針 ,斷點續傳

文章目錄 1. TCP和UDP的區別2. 對http接口解釋3. Cookie和Session的區別4. http和https的區別5. 智能指針6.斷點續傳 1. TCP和UDP的區別 tcp的特點&#xff1a; 面向連接&#xff0c;可靠性高&#xff0c;全雙工&#xff0c;面向字節流udp特點&#xff1a;無連接&#xff0c;不…

JAVASE(五)

目錄 一、成員變量和局部變量 1.定義 2.區別 &#xff08;1&#xff09;相同 &#xff08;2&#xff09;不同 二、方法和構造方法 1.定義 2.構造方法細節 3.方法重載 一、成員變量和局部變量 1.定義 &#xff08;1&#xff09;成員變量是…

Matlab中快速查找元素索引號

1、背景介紹 在算法設計過程中&#xff0c;有時候需要從一維/二維數組中&#xff0c;快速查找是否某個元素&#xff0c;以及該元素所在的位置。如一維矩陣[1 2 3 4 5 6 6 7 8]所示&#xff0c;元素6所在的位置為6 7。 2、函數測試 matlab中函數find()可以快速查找到指定元素所…

【DuodooTEKr 】多度科技 以開源之力,驅動企業數字化轉型

多度科技 背景 / Background 在全球產業鏈重構與國內經濟雙循環的浪潮下&#xff0c;中國制造業與貿易企業正面臨數字化升級的迫切需求。開源技術作為數字化轉型的基石&#xff0c;不僅能打破技術壁壘、降低企業成本&#xff0c;更能通過協作創新加速產業智能化進程。 多度科技…

【HarmonyOS Next】鴻蒙應用故障處理思路詳解

【HarmonyOS Next】鴻蒙應用崩潰處理思路詳解 一、崩潰問題發現后定位 1. 崩潰現象&#xff1a; 常見的崩潰問題表現為&#xff0c;應用操作后白屏閃退&#xff0c;或者應用顯示無響應卡死。 2.定位問題&#xff1a; 發現崩潰后&#xff0c;我們首先需要了解復現步驟&#x…

linunx ubuntu24.04.02裝libfuse2導致無法開機進不了桌面解決辦法

osu.appimage運行需要libfuse2 然后我就下了fuse,打了兩把第二天無法開機 這樣是不能開機的 這樣是可以開機的 解決辦法一&#xff1a;玩星火商店的osu&#xff0c;好了問題解決 解決辦法二&#xff1a; 在這個頁面 ctrl alt f2進入tty6 sudo apt install ubuntu-desktop 進…

Maven 的常用指令

一、核心構建指令 mvn clean 作用&#xff1a;刪除 target 目錄&#xff08;清理編譯/打包生成的文件&#xff09;。 場景&#xff1a;確保從頭開始構建&#xff0c;避免殘留文件干擾。 mvn compile 作用&#xff1a;編譯項目源代碼。 場景&#xff1a;快速檢查代碼是否能編…

llvm數據流分析

llvm數據流分析 1.數據流分析2.LLVM實現2.1.常量傳播2.2.活躍性分析 相關參考文檔&#xff1a;DataFlowAnalysisIntro、ustc編譯原理課程、南大程序分析課程1、南大程序分析課程2。 1.數據流分析 數據流分析在編譯優化等程序分析任務上都有重要應用。通常數據流分析可被抽象為…