当前位置: 首页 > news >正文

js的for in 和 for of的详解

for...infor...of 是 JavaScript 中的两种循环结构,它们用于不同的场景,适用于不同的数据类型。下面将详细介绍它们的用法、区别以及适用场景。

1. for...in 循环

for...in 用于遍历对象的可枚举属性(包括继承的属性)。

语法
for (const key in object) { // 执行代码块 }
示例
const person = { name: 'Alice', age: 25, city: 'New York' }; 
for (const key in person) { console.log(key, person[key]) // 输出属性名和对应的值}
注意事项
  • for...in 遍历对象时,会遍历其原型链上的可枚举属性。
  • 遍历数组时,虽然可以使用 for...in,但不推荐,因为它会返回数组的索引(字符串形式),可能会导致意外结果。
  • 可以使用 hasOwnProperty() 方法来过滤掉继承的属性。

2. for...of 循环

for...of 用于遍历可迭代对象(如数组、字符串、Map、Set等),直接获取元素的值。

语法
for (const value of iterable) { // 执行代码块 }
示例
const numbers = [1, 2, 3, 4, 5];for (const number of numbers) {console.log(number); // 输出数组中的每个元素 }
注意事项
  • for...of 不能用于对象的遍历,只有可迭代对象(如数组、字符串、Map、Set)才能使用。
  • 对于字符串,for...of 会按字符进行遍历。
  • 它不会遍历数组的索引,而是直接访问元素的值,避免了 for...in 可能带来的问题。

3. 总结对比

特性for...infor...of
遍历对象类型对象的可枚举属性可迭代对象(数组、字符串等)
结果属性名(key)属性值(value)
遍历方式包括原型链上的可枚举属性仅遍历对象本身的元素
不推荐用于数组(可能导致意外结果)对象
使用场景遍历对象的属性遍历数组、字符串等可迭代对象

4. 使用场景

  • for...in: 当你需要访问对象的属性时,例如处理配置对象、字典或简单的键值对。

    const settings = { volume: 10, brightness: 70 };for (const key in settings) { console.log(`${key}: ${settings[key]}`);}

  • for...of: 当你需要遍历数组或其他可迭代对象的元素时,特别是在处理列表或序列时更为简洁和直观。

    const fruits = ['apple', 'banana', 'cherry'];for (const fruit of fruits) {console.log(fruit); }

5. 结论

在选择使用时,考虑你需要遍历的对象类型和目的,选择最合适的循环结构可以提高代码的可读性和性能。

http://www.lryc.cn/news/462602.html

相关文章:

  • 前端工具函数库
  • Java程序设计:Spring boot(4)——Freemarker Thymeleaf视图技术集成
  • JavaScript 第19章:Web Storage
  • [山河2024] week2
  • 无限可能LangChain——开启大模型世界
  • URL路径以及Tomcat本身引入的jar包会导致的 SpringMVC项目 404问题、Tomcat调试日志的开启及总结
  • 如何引起Java中的System.in.read()函数的异常
  • 深入理解Flutter鸿蒙next版本 中的Widget继承:使用extends获取数据与父类约束
  • Loss:Focal Loss for Dense Object Detection
  • Unity3D中Excel表格的数据处理模块详解
  • 【python】OpenCV—Fun Mirrors
  • QT IEEE754 16进制浮点数据转成10进制
  • 无人机+视频推流直播EasyCVR视频汇聚/EasyDSS平台在森林防护巡检中的解决方案
  • Rancher—多集群Kubernetes管理平台
  • 使用多IP香港站群服务器对网站管理seo优化提升排名有益处
  • 网管平台(基础篇):网管系统的重要性
  • Ubuntu20.04下安装多CUDA版本,以及后续切换卸载
  • 图像处理高频面试题及答案
  • 尤雨溪都打赏的虚拟列表组件,到底有多强
  • FrameWork使用EfCore数据库映射举例
  • 汽车与航空领域的功能安全对比:ISO 26262-6 与 DO-178C 的差异浅析
  • linux命令之lspci用法
  • 虚幻闪烁灯光材质
  • UNION ALL函数用法
  • JavaWeb合集14-WebSocket
  • Vue快速嵌入百度地图,避坑提效指南
  • 深入理解售后派单管理系统,功能优势一览
  • 一文读懂K8S的PV和PVC以及实践攻略
  • 在react-native中如何获取View的漏出比例和漏出时间
  • 谷歌新安装包文件形式 .aab 在UE4中的打包原理