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.mzph.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.数据流分析 数据流分析在编译优化等程序分析任务上都有重要应用。通常数据流分析可被抽象为…