首页 > 编程语言 >JavaScript 中 for-in 循环和 for-of 循环的区别和适用场景

JavaScript 中 for-in 循环和 for-of 循环的区别和适用场景

时间:2023-12-21 21:04:37浏览次数:30  
标签:遍历 迭代 对象 JavaScript 场景 元素 循环 属性

前言

在 JavaScript 中,循环是一种非常常见的操作。其中,for-in 循环和 for-of 循环是两种常用的循环方式。本文将详细介绍这两种循环方式的用法、特点以及适用场景,帮助读者更好地理解和应用它们。

正文内容

一、for-in 循环

1. 用法

for-in 循环用于遍历对象的属性。其基本语法如下:

for (var key in object) {
  // 遍历 object 的属性
}

其中,key 为 object 的属性名,object 为需要遍历的对象。在循环体中,可以使用 key 获取对象的属性值。

2. 特点

for-in 循环的特点如下:

(1)遍历对象的属性。for-in 循环遍历的是对象的属性,包括对象自身的属性和继承自原型链的属性。

(2)遍历顺序不确定。for-in 循环遍历对象属性的顺序是不确定的,可能与属性在对象中的定义顺序不一致。

(3)可遍历数组的索引。虽然 for-in 循环主要用于遍历对象的属性,但也可以用于遍历数组的索引,相当于遍历数组的属性。

3. 适用场景

由于 for-in 循环遍历的是对象的属性,因此适用于以下场景:

(1)遍历对象的属性。for-in 循环可以用于遍历对象的属性,获取对象的属性值。

(2)遍历数组的索引。虽然 for-in 循环不是专门用于遍历数组的索引,但也可以用于遍历数组的索引,获取数组的元素值。

二、for-of 循环

1. 用法

for-of 循环用于遍历可迭代对象的元素。其基本语法如下:

for (var value of iterable) {
  // 遍历 iterable 的元素
}

其中,value 为 iterable 的元素值,iterable 为需要遍历的可迭代对象。在循环体中,可以使用 value 获取可迭代对象的元素值。

2. 特点

for-of 循环的特点如下:

(1)遍历可迭代对象的元素。for-of 循环遍历的是可迭代对象的元素,包括数组、字符串、Set、Map 等。

(2)遍历顺序确定。for-of 循环遍历可迭代对象的元素的顺序是确定的,与元素在对象中的顺序一致。

(3)不支持遍历对象的属性。for-of 循环不支持遍历对象的属性,只能用于遍历可迭代对象的元素。

3. 适用场景

由于 for-of 循环遍历的是可迭代对象的元素,因此适用于以下场景:

(1)遍历数组的元素。for-of 循环可以用于遍历数组的元素,获取数组的元素值。

(2)遍历字符串的字符。for-of 循环可以用于遍历字符串的字符,获取字符串的字符值。

(3)遍历 Set 和 Map 的元素。for-of 循环可以用于遍历 Set 和 Map 的元素,获取集合和映射的元素值。

三、for-in 循环和 for-of 循环的比较

1. 遍历对象的属性 vs. 遍历可迭代对象的元素

for-in 循环主要用于遍历对象的属性,而 for-of 循环主要用于遍历可迭代对象的元素。因此,如果需要遍历对象的属性,应该使用 for-in 循环;如果需要遍历可迭代对象的元素,应该使用 for-of 循环。

2. 遍历顺序不确定 vs. 遍历顺序确定

for-in 循环遍历对象属性的顺序是不确定的,而 for-of 循环遍历可迭代对象的元素的顺序是确定的。因此,如果需要遍历的顺序不重要,可以使用 for-in 循环;如果需要遍历的顺序有要求,应该使用 for-of 循环。

3. 可遍历数组的索引 vs. 不支持遍历对象的属性

for-in 循环可以用于遍历数组的索引,相当于遍历数组的属性;而 for-of 循环不支持遍历对象的属性,只能用于遍历可迭代对象的元素。因此,如果需要遍历数组的索引,可以使用 for-in 循环;如果需要遍历其他类型的可迭代对象,应该使用 for-of 循环。

总结

本文介绍了 JavaScript 中 for-in 循环和 for-of 循环的用法、特点以及适用场景。对于初学者来说,掌握这两种循环方式的区别和用法,有助于更好地理解和应用 JavaScript 中的循环语句。在实际开发中,根据具体的需求和数据类型,选择合适的循环方式,可以提高代码的效率和可读性。

标签:遍历,迭代,对象,JavaScript,场景,元素,循环,属性
From: https://blog.51cto.com/frontyue/8926691

相关文章

  • 【模拟】Kafka集群异常对客户端影响及丢消息场景
    0环境集群信息4个brokertopic:100+(每个topic30个partition)集群加密方式:plaintext存储:cephProducer单线程,每秒50条左右Consumer不间断poll消息测试客户端原生的KafkaConsumer/KafkaProducer;测试场景Producer和Consumer运行过程中,通过登录kakfa运行主机,直接停止当前......
  • intellij idea常用快捷键快速生成main方法、for循环、out输出
    1、System.out.println()//输入sout,按下enter键,生成System.out.println()方法.sout--->soutv=System.out.println("变量名="+变量)soutp--->System.out.println("")2、publicstaticvoidmain(String[]args){}//输入psvm,按下enter键,生成main方法.3、for(inti=......
  • JavaScript 数组方法重写
    constlist=[1,2,3]Array.prototype.myForeach=function(fn){for(leti=0;i<this.length;i++){fn(this[i],i,this)}}Array.prototype.myMap=function(fn){const_list=[]for(leti=0;i<this.length;i......
  • 远程视频监控技术EasyCVR可视化监控管理平台在地质灾害场景中的应用
    随着科技的不断发展,视频监控技术已经成为了地质灾害监测与预警的重要手段之一。在地质灾害场景中,视频监控技术可以实时监测灾害的发展过程,及时发现险情,为抢险救援提供准确的信息,保障人民生命财产安全。一、视频监控技术的优势1)实时监测:视频监控技术可以实时监测地质灾害的发展过......
  • 逻辑多租场景下,故障爆炸半径的控制实践
    本文分享自华为云社区《逻辑多租场景下,故障爆炸半径的控制实践》,作者:王福强陈子栋。背景某系统是一款华为自研的工具平台,可部署在公有云上,面向全球多项目、多客户提供服务。为了满足数据安全合规要求,并尽可能降低用户使用成本以及提升运维效率,整体上采用了混合多租的设计方案,逻......
  • 解决先异步调用一个接口,再根据返回值继续循环异步,然后再同步的场景.then的连续调用
    场景描述:人员select下拉框为分页只查20个数据下拉(真实数据可能下拉有大几千),但是编辑页进来的id不在这20个数据下拉之内,所以显示的就是id值数组(因为是多选下拉框)解决:编辑回显方法内写getUserSecList(data.collaboratorVoList);然后先调人员20个下拉,调完后,根据传参的编辑i......
  • c# for循环下使用try catch导致性能问题
    在for循环里,有8w数据,结果需要10+分钟才遍历完(生产环境下),结果发现导致耗时的代码如下try{ritem.Qty=Convert.ToDecimal(value);}catch(Exceptione){Logger.Info(e.ToString());ritem.Qty=0;}将以上代码修改为如下后,执行需要20秒。因为每次异常被抛出时......
  • pytorch——基于循环神经网络的情感分类
    任务目标基于给定数据集,进行数据预处理,搭建以LSTM为基本单元的模型,以Adam优化器对模型进行训练,使用训练后的模型进行预测并计算预测分类的准确率。数据集信息IMDB数据集是一个对电影评论标注为正向评论与负向评论的数据集,共有25000条文本数据作为训练集,25000条文本数据作为测试......
  • 单点登录业务场景和使用流程
    单点登录:己方系统(a)域名链接单点登录提供方(b)的登录在b页面上进行账号密码的登录操作,将登录信息转发到a系统的登录接口,而后a系统发送请求前往b系统的登录获取token在获取token的时候a方便可将用户信息和token一起返回,也可多写一个使用token换取用户身份信息的接口进行返回,b系统......
  • 全球知名的五款JavaScript混淆加密工具详解
    ​现在市场上有很多好用的混淆加密工具,其中一些比较流行且受欢迎的工具包括:1、UglifyJS(罗马尼亚):UglifyJS是一个非常流行的JavaScript工具库,它可以压缩、混淆、美化和格式化JavaScript代码。使用UglifyJS时,您可以通过调整参数来控制压缩级别并设置混淆选项。注:主要用于压缩j......