比较JavaScript中的for...in和for...of循环

在这里插入图片描述

🤍 前端开发工程师、技术日更博主、已过CET6
🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1
🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》
🍚 蓝桥云课签约作者、上架课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入门到实战全面掌握 uni-app》

文章目录

    • 摘要:
    • 引言:
    • 正文:
      • 1. for...in循环
      • 2. for...of循环
      • 3. 区别和适用场景
    • 总结:
    • 参考资料:

摘要:

本文将详细介绍JavaScript中的for…in和for…of循环的区别及使用场景,帮助你对这两种循环语句有更深入的理解。

引言:

JavaScript中的for循环是基本语法之一,而在ES6中,for…in和for…of两种新的循环语句被引入。那么,这两种循环语句有什么区别?在什么场景下使用呢?接下来,我们将一起探讨这个问题。

正文:

1. for…in循环

for…in循环是JavaScript中一种特殊的循环结构,它主要用于遍历对象(Object)的属性。在for…in循环中,它会遍历对象本身的所有可枚举属性,并将其属性名赋值给循环变量。

for…in循环的结构如下:

for (let variable in object) {// 在这里使用变量
}

在这个循环中,variable是一个新的变量,它将在每次迭代中被赋值为object的一个可枚举属性名。

需要注意的是,for…in循环有一些特点:

  1. 它只能遍历对象自身的可枚举属性,无法遍历到继承的属性或者不可枚举的属性。

  2. 在遍历过程中,variable变量只在循环内部有效,循环外部无法访问。

下面是一个for…in循环的例子:

let obj = {name: "张三",age: 25,gender: "男"
};for (let key in obj) {console.log(key); // 输出: name, age, gender
}

在这个例子中,for…in循环遍历了obj对象的所有属性,并将属性名赋值给变量key,然后输出key的值。

如果想要在循环外部使用循环变量,可以在循环外部声明一个变量,并将循环变量赋值给这个变量。例如:

let obj = {name: "张三",age: 25,gender: "男"
};let key;
for (key in obj) {console.log(key); // 输出: name, age, gender
}console.log(key); // 输出: gender

在这个例子中,我们在循环外部声明了一个变量key,并将循环变量赋值给key,所以即使在循环外部,我们也可以访问key的值。

2. for…of循环

for…of循环是ES6中引入的一种新的循环结构,它可以用来遍历可迭代对象(如数组、字符串、Set、Map等)的元素。在for…of循环中,它会遍历可迭代对象的所有元素,并将其元素值赋值给循环变量。

for…of循环的结构如下:

for (let variable of iterable) {// 在这里使用变量
}

在这个循环中,variable是一个新的变量,它将在每次迭代中被赋值为iterable的一个元素值。iterable是一个可迭代对象,如数组、字符串、Set、Map等。

for…of循环的特点:

  1. 它可以遍历可迭代对象的所有元素,而不仅仅是对象的属性。

  2. 在遍历过程中,variable变量只在循环内部有效,循环外部无法访问。

下面是一个for…of循环的例子:

let arr = [1, 2, 3, 4, 5];for (let value of arr) {console.log(value); // 输出: 1, 2, 3, 4, 5
}

在这个例子中,for…of循环遍历了arr数组的所有元素,并将元素值赋值给变量value,然后输出value的值。

如果想要在循环外部使用循环变量,可以在循环外部声明一个变量,并将循环变量赋值给这个变量。例如:

let arr = [1, 2, 3, 4, 5];let value;
for (value of arr) {console.log(value); // 输出: 1, 2, 3, 4, 5
}console.log(value); // 输出: 5

在这个例子中,我们在循环外部声明了一个变量value,并将循环变量赋值给value,所以即使在循环外部,我们也可以访问value的值。

3. 区别和适用场景

for…in循环适用于遍历对象属性,特别是当对象的属性不确定时,可以通过for…in循环来遍历。而for…of循环适用于遍历可迭代对象,特别是当需要遍历的是一系列固定的值时,如数组、字符串等。

for…in循环和for…of循环都是JavaScript中用于遍历对象的循环结构,但它们在某些方面有所不同。

for…in循环:

  1. 只能用于遍历对象(Object)的属性。
  2. 无法直接获取到属性的值,需要通过对象[属性名]的方式获取。
  3. 遍历过程中,变量在循环内部有效,循环外部无法访问。
  4. 适用于遍历对象的所有可枚举属性。

for…of循环:

  1. 可以用于遍历可迭代对象(如数组、字符串、Set、Map等)的所有元素。
  2. 可以直接获取到元素的值,无需通过对象[属性名]的方式获取。
  3. 遍历过程中,变量在循环内部有效,循环外部无法访问。
  4. 适用于遍历可迭代对象的所有元素。

总结:

for…in循环适用于遍历对象的所有可枚举属性,而for…of循环适用于遍历可迭代对象的所有元素。在实际使用中,可以根据需要选择合适的循环结构。

JavaScript中的for…in和for…of循环各有特点,选择合适的循环语句可以使代码更加简洁、易读。了解它们的区别和适用场景,可以帮助你在开发过程中更好地使用这两种循环语句。

参考资料:

  1. 《JavaScript高级程序设计》
  2. 《ES6标准入门》

📚 以上内容仅供参考,具体实践还需结合项目实际情况。希望本文能为你在理解和使用JavaScript中的for…in和for…of循环方面带来一定的启示和帮助。如有疑问,欢迎留言交流。🤝

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/741427.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux解析域名指令 nslookup 或者 host

host www.baidu.com 第二种方法 nslookup www.baidu.com 注意:ns是name server之意

【包邮送书】Elasticsearch 通过索引阻塞实现数据保护深入解析

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术。关…

回收小程序系统后台管理功能

会员管理:管理员可以查看和管理会员的基本信息,如姓名、联系方式、寄送地址和订单记录等。 产品管理:对回收物品进行管理,包括分类、规格设定、数据统计等。 订单管理:对所有订单进行追踪和管理,确保订单处…

Leetcode 543. 二叉树的直径

题目描述: 给你一棵二叉树的根节点,返回该树的 直径 。 二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。 两节点之间路径的 长度 由它们之间边数表示。 示例 1: 输入:ro…

汽车屏类产品(五):仪表Cluster常用芯片i.MX117x

前言: 仪表一般就是指方向盘前面那个表盘。做仪表的芯片最主要需要支持显示Display,而仪表的主要排版布局多种多样,但是主旨显示内容不尽相同。 仪表需求: 1、rpm转速表盘 仪表Cluster一般会有转速表盘rpm,单位一般是x1000,大部分汽车仪表范围就是0~8,也就是最高8000…

MySQL安装使用(mac、windows)

目录 macOS环境 一、下载MySQL 二、环境变量 三、启动 MySql 四、初始化密码设置 windows环境 一、下载 二、 环境配置 三、安装mysql 1.初始化mysql 2.安装Mysql服务 3.更改密码 四、检验 1.查看默认安装的数据库 2.其他操作 macOS环境 一、下载MySQL 打开 MyS…

用 Qt 不怕被告吗?

用 Qt 不怕被告吗? 在开始前我有一些资料,是我根据网友给的问题精心整理了一份「Qt 的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!!! 收律师函不…

云浮肇庆三维扫描钣金铸件抄数逆向设计外观画3D图上门抄数服务

钣金铸件抄数逆向设计画图是一项精密而富有挑战性的工作,它要求工程师具备深厚的专业知识和丰富的实践经验。3D抄数,即是通过精密测量设备获取钣金铸件的三维数据,为后续的逆向设计提供基础。逆向设计则是指根据已有的实物或模型,…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:StepperItem)

用作Stepper组件的页面子组件。 说明: 该组件从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 子组件 支持单个子组件。 接口 StepperItem() 属性 参数名参数类型参数描述prevLabelstring设置左侧文本按钮内…

2024年软考计划开始了,你准备好了吗?

目录标题 2024年度计算机技术与软件专业技术资格(水平)考试工作计划计算机软考中级科目哪个含金量最高?报考流程和说明 2024年度计算机技术与软件专业技术资格(水平)考试工作计划 一、2024年度计算机软件资格考试(初级…

<Linux> 线程控制

目录 一、线程资源的分配 (一)线程私有资源 (二)线程共享资源 二、原生线程库 三、线程控制接口 (一)线程创建 - pthread_create() 1. 一个线程 2. 一批线程 (二)线程等待 …

linux 新增定时任务

1、创建定时任务 crontab -e 2、加入定时任务规则 0 2 * * * /usr1/local/mysql-backup/backup.sh 说明:backup.sh是sh脚本 3、重启定时任务 service crond restart 扩展 1、查看定时任务列表 crontab -l 2、需要修改定时任务 crontab -e

BUUCTF---web---[护网杯 2018]easy_tornado1

1.点开题目链接 2.依次点开文件链接 3.通过第一个信息可知,flag在文件名为/fllllllllllllag这个里面,第二个信息中的render是渲染函数,第三个个信息中是一个md5加解密,因为filename我们已经知道,所以我们需要找到cooki…

哪些数据可视化工具适合初学者使用?

数据建模及可视化平台,提供一站式全链路数据生命周期管理方案,支持数据建模,支持报表、图谱、大屏可视化应用的快速构建,支持AIBI探索实践,全流程免代码,免费使用 1、功能结构 2、技术架构 3、功能清单

2024年独立站C端只靠SEO还有机会吗?(川圣SEO)蜘蛛池

baidu搜索:如何联系八爪鱼SEO? baidu搜索:如何联系八爪鱼SEO? baidu搜索:如何联系八爪鱼SEO? 2024年独立站C端只靠SEO还有机会吗?#蜘蛛池SEO 都2024年了,你的外贸独立站推广还需要…

盘点Python中4种读取JSON文件和提取JSON文件内容的方法

目录 一、使用json模块的load()方法 二、使用json模块的loads()方法 三、使用pandas库的read_json()方法 四、使用第三方库如requests从网络API获取JSON数据 总结 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它基于EC…

一文总结CNN中【各类卷积】操作

本文详细总结CNN中各类卷积,旨在指导 domain-specific 更好的模型设计,包括标准卷积,分组卷积(Group Conv),深度可分离卷积(Depthwise Separable Conv),转置卷积&#xf…

官网解决方案之:人力资源网站建设的十大要点

hello,大家好,我是贝格前端工场,从这期开始分享行业网站该如何规划和建设,本期从人力资源网站开始说起。 建设人力资源官网是企业展示自身人力资源管理能力,吸引人才,提升企业形象的重要途径。以下是建设人…

【Linux实践室】Linux 查询命令帮助语句(文末送书)

🌈个人主页:聆风吟_ 🔥系列专栏:Linux实践室、网络奇遇记 🔖少年有梦不应止于心动,更要付诸行动。 文章目录 一. ⛳️任务描述二. ⛳️相关知识2.1 🔔Linux man命令2.2 🔔Linux info…

软件测试知识面试题:白盒测试、黑盒测试、测试用例

文章目录 白盒测试1、白盒测试分两类2、白盒测试的四个原则3、白盒测试常用的7类测试 黑盒测试1、黑盒测试的优缺点2、黑盒测试的方法3、黑盒测试的原则 测试用例1、测试用例包含2、设计测试用例所需的文档资料3、采用白盒测试技术设计用例的目的4、采用黑盒测试技术设计用例的…