首页 > 其他分享 >for...in 循环和 for...of 循环的区别

for...in 循环和 for...of 循环的区别

时间:2023-07-27 10:11:22浏览次数:37  
标签:... 遍历 迭代 区别 循环 数组 属性

JavaScript 中的 for...in 循环和 for...of 循环是两种不同的迭代方式,用于遍历数据结构中的元素。它们具有一些区别:

  1. for...in 循环:
    • 用于遍历对象的可枚举属性(包括原型链上的属性)。
    • 迭代的是键(属性名),而非值。
    • 不保证迭代顺序,因为对象的属性顺序在规范中并未定义。
    • 比较适合用于遍历对象的属性。

以下是使用 for...in 循环遍历对象的示例:

const obj = { a: 1, b: 2, c: 3 };

for (let key in obj) {
  console.log(key); // 输出属性名:a、b、c
  console.log(obj[key]); // 输出属性值:1、2、3
}
  1. for...of 循环:
    • 用于遍历可迭代对象(如数组、字符串、Set、Map 等)中的元素。
    • 迭代的是值本身,而非键。
    • 保证按照迭代顺序依次访问每个元素。
    • 比较适合用于遍历数组、字符串等数据结构。

以下是使用 for...of 循环遍历数组的示例:

const arr = [1, 2, 3];

for (let value of arr) {
  console.log(value); // 输出元素值:1、2、3
}

需要注意的是,for...in 循环不应该用于遍历数组,因为它会迭代数组原型链上的非数字属性,而这往往不是我们所期望的行为。而 for...of 常用于遍历数组等可迭代对象,提供了一种简洁的语法来访问集合中的每个元素。

总结来说,for...in 循环适用于遍历对象的属性,for...of 循环适用于遍历可迭代对象(如数组)的元素。在选择使用哪种循环时,需要考虑数据结构的特点和迭代需求。

标签:...,遍历,迭代,区别,循环,数组,属性
From: https://www.cnblogs.com/codebook/p/17584192.html

相关文章

  • 分布式事务两阶段提交和三阶段提交有什么区别?
    在分布式事务中,通常使用两阶段协议或三阶段协议来保障分布式事务的正常运行,它也是X/Open公司定义的一套分布式事务标准。X/Open公司是由多家国际计算机厂商所组成的联盟组织,它建立之初是为了向UNIX环境提供标准。分布式事务是指在分布式系统中,多个节点之间进行的事务操作......
  • Java面试题 P9:List和Set的区别
    List:有序,按对象进入的顺序保存对象,可重复,允许多个Null元素对象,可以使用Iterator取出所有元素,在逐一遍历,还可以使用get(intindex)下标方式,获取指定下标的元素值Set:无序,不可重复,最多允许有一个Null元素对象,取元素时只能用lterator接口取得所有元素,在逐一遍历各个元素  ......
  • Java面试题 P8:接口和抽象类的区别
    普通回答:1、抽象类可以有抽象方法和实现的方法,可以存在普通成员函数,而接口中只能存在publicinterface方法。2、抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是publicstaticfinal类型的。3、抽象类只能继承一个,接口可以实现多个。抽象类和接口的异同点 ......
  • Java面试题 P7:重载和重写的区别
    重载:发生在同一个类中,方法名必须相同,参数类型不同,参数个数不同,参数顺序不同,方法返回值和修饰符可以不同。1publicintadd(inta,Stringb)2publicStringadd(inta,Stringb)3//编译时会报错4重载与返回值无关。重写:发生在父子类中,方法名、参数列表必须相同,返回值范围......
  • TCP和UDP的区别以及各自的应用场景
    TCP和UDP区别:1.连接TCP是面向连接的传输层协议,传输数据前先要建立连接。UDP是不需要连接的,即刻就可以传输数据。2.服务对象TCP是一对一的两点服务,也就是说一条连接只有两个端点。UDP支持一对一,一对多,多对多的交互通信。3.可靠性TCP是要保证可靠交付数据的,数据无差错,不丢失......
  • celery 启动显示警告信息“...whether broker connection retries are made during st
    博客地址:https://www.cnblogs.com/zylyehuo/在settings文件中设置broker_connection_retry_on_startup=True修改配置后运行效果如下......
  • Java中代码Bug记录--泛型失效、数组删除、HashMap死循环
    最近在工作的过程中,遇到了不少奇怪自己或者同事的Bug,都是一些出乎意料的,不太容易发现的,记录一下来帮助可能也遇到了这些Bug的人1.编译时泛型校验失效Map<String,String>nameToType=newHashMap<>();nameToType.put("testName",123);//java:不兼容的类型:int无法转......
  • 【Java面试题】Spring是如何解决循环依赖问题?
    ......
  • 敲低这个基因就可以开怀大吃了!诺奖技术助力编辑蛋白质组!NGS可使临床治疗受益!...
    1壹1吃货的春天?Science子刊:科学家找到一种胡吃海塞也能健康的方法载脂蛋白CIII(ApoCIII)水平升高与代谢性疾病有关。在喂食高脂肪食物的同时采用反义寡核苷酸降低ApoCIII基因的表达可保护代谢系统不发生紊乱;因食用高脂肪而发生代谢紊乱的小鼠使用反义寡核苷酸治疗后,其血糖代谢、......
  • 数据结构练习笔记——循环队列的基本操作
    循环队列的基本操作【问题描述】根据循环队列的类型定义,完成循环队列的基本操作。主函数中测试队列。【输入形式】一个整数m,表示入队的元素个数【输出形式】第一行:输出队头元素第二行:队列中元素依次出队以空格间隔【样例输入】5【样例输出】113579【样例输入】0【样......