0

0

如何用for...of遍历可迭代对象?

幻夢星雲

幻夢星雲

发布时间:2025-06-28 19:05:01

|

266人浏览过

|

来源于php中文网

原创

for...of 循环用于遍历可迭代对象,如数组、字符串、map、set 等。1. 它通过简洁的语法 for (const element of iterable) 直接获取每个元素;2. 支持自定义可迭代对象,通过实现 symbol.iterator 方法;3. 与 for...in 不同,for...of 遍历值而非属性名;4. 可用于数据处理、异步操作、dom 操作等场景;5. 应避免在需要索引、非可迭代对象或性能极端敏感的情况下使用;6. 可用 break 中断循环,continue 跳过当前项,return 退出函数及循环。

如何用for...of遍历可迭代对象?

for...of 循环是 JavaScript 中遍历可迭代对象(Iterable objects)的利器。它能让你轻松访问数组、字符串、Map、Set 等数据结构中的元素,而无需手动管理索引。

如何用for...of遍历可迭代对象?

解决方案

如何用for...of遍历可迭代对象?

for...of 循环的语法非常简洁:

for (const element of iterable) {
  // 使用 element 做一些事情
}
  • element:循环的每个迭代中,element 会被赋值为可迭代对象中的下一个值。
  • iterable:你想要遍历的可迭代对象。

示例:遍历数组

如何用for...of遍历可迭代对象?
const myArray = [1, 2, 3, 4, 5];

for (const number of myArray) {
  console.log(number); // 输出 1, 2, 3, 4, 5
}

示例:遍历字符串

const myString = "Hello";

for (const character of myString) {
  console.log(character); // 输出 H, e, l, l, o
}

示例:遍历 Map

Map 对象存储键值对for...of 循环会遍历 Map 中的每个键值对,以 [key, value] 的形式返回。

const myMap = new Map();
myMap.set("name", "Alice");
myMap.set("age", 30);

for (const [key, value] of myMap) {
  console.log(`${key}: ${value}`); // 输出 name: Alice, age: 30
}

示例:遍历 Set

Set 对象存储唯一的值。 for...of 循环会遍历 Set 中的每个值。

const mySet = new Set([1, 2, 3, 3, 4, 4, 5]); // Set 会自动去重

for (const number of mySet) {
  console.log(number); // 输出 1, 2, 3, 4, 5
}

for...in区别

Magician
Magician

Figma插件,AI生成图标、图片和UX文案

下载

for...offor...in 经常被混淆,但它们用途不同。for...in 循环用于遍历对象的 属性名,而 for...of 循环用于遍历可迭代对象的

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

// for...in 遍历属性名
for (const key in myObject) {
  console.log(key); // 输出 a, b, c
}

// 注意:for...of 不能直接遍历普通对象,因为普通对象不是可迭代的
// for (const value of myObject) { // 会报错
//   console.log(value);
// }

自定义可迭代对象

你可以通过实现 Symbol.iterator 方法来使自定义对象可迭代。 这个方法需要返回一个迭代器对象,该迭代器对象必须具有 next() 方法。 next() 方法返回一个包含 valuedone 属性的对象。

const myIterable = {
  data: [1, 2, 3],
  [Symbol.iterator]() {
    let index = 0;
    return {
      next: () => {
        if (index < this.data.length) {
          return { value: this.data[index++], done: false };
        } else {
          return { value: undefined, done: true };
        }
      },
    };
  },
};

for (const number of myIterable) {
  console.log(number); // 输出 1, 2, 3
}

for...of 循环的优势在于它的简洁性和易用性,它能够清晰地表达遍历可迭代对象的意图,避免了手动管理索引的繁琐。

for...of 循环可以用于哪些实际场景?

  • 数据处理: 遍历数组或集合来执行数据转换、过滤或聚合操作。
  • 异步操作: 结合 async/await 遍历异步数据流,例如从服务器获取的数据。
  • DOM 操作: 遍历 DOM 元素集合,例如为每个元素添加事件监听器。
  • 状态管理: 遍历状态对象来更新 UI 或执行其他副作用。

在什么情况下应该避免使用 for...of 循环?

  • 需要访问索引: 如果你需要访问当前元素的索引,for...of 循环不是最佳选择。可以使用传统的 for 循环或 Array.prototype.forEach() 方法。
  • 非可迭代对象: for...of 循环只能用于可迭代对象。如果尝试遍历非可迭代对象,会抛出错误。 需要使用 for...in (遍历键) 或 Object.keys/values/entries (转换为数组再遍历)。
  • 性能敏感场景: 在某些性能敏感的场景下,传统的 for 循环可能比 for...of 循环略快。 但通常情况下,for...of 循环的性能足够好,而且代码更易读。 性能优化应该基于实际测量,而不是盲目猜测。

如何提前中断 for...of 循环?

可以使用 break 语句提前中断 for...of 循环。 break 语句会立即退出循环,并将控制权转移到循环之后的代码。

const myArray = [1, 2, 3, 4, 5];

for (const number of myArray) {
  if (number > 3) {
    break; // 当 number 大于 3 时,退出循环
  }
  console.log(number); // 输出 1, 2, 3
}

也可以使用 continue 语句跳过当前迭代,继续下一次迭代。 continue 语句会跳过循环体中剩余的代码,并立即开始下一次迭代。

const myArray = [1, 2, 3, 4, 5];

for (const number of myArray) {
  if (number % 2 === 0) {
    continue; // 当 number 是偶数时,跳过本次迭代
  }
  console.log(number); // 输出 1, 3, 5
}

return 语句也可以用于提前退出循环,但 return 语句会退出整个函数,而不仅仅是循环。 因此,只有在循环位于函数内部,并且你想要同时退出循环和函数时,才应该使用 return 语句。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
php中foreach用法
php中foreach用法

本专题整合了php中foreach用法的相关介绍,阅读专题下面的文章了解更多详细教程。

75

2025.12.04

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

531

2023.09.20

java中break的作用
java中break的作用

本专题整合了java中break的用法教程,阅读专题下面的文章了解更多详细内容。

118

2025.10.15

java break和continue
java break和continue

本专题整合了java break和continue的区别相关内容,阅读专题下面的文章了解更多详细内容。

258

2025.10.24

java break和continue
java break和continue

本专题整合了java break和continue的区别相关内容,阅读专题下面的文章了解更多详细内容。

258

2025.10.24

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

298

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

212

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1501

2023.10.24

clawdbot ai使用教程 保姆级clawdbot部署安装手册
clawdbot ai使用教程 保姆级clawdbot部署安装手册

Clawdbot是一个“有灵魂”的AI助手,可以帮用户清空收件箱、发送电子邮件、管理日历、办理航班值机等等,并且可以接入用户常用的任何聊天APP,所有的操作均可通过WhatsApp、Telegram等平台完成,用户只需通过对话,就能操控设备自动执行各类任务。

19

2026.01.29

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP基础入门课程
PHP基础入门课程

共33课时 | 2万人学习

前端系列快速入门课程
前端系列快速入门课程

共4课时 | 0.4万人学习

Lua教程
Lua教程

共22课时 | 17.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号