手册

目录

可迭代对象

收藏453

阅读599

更新时间2025-08-07

for..of 循环

for..of 语句用于遍历可迭代对象的元素。

语法

for (variable of iterable) {
  // 要执行的代码块
}

迭代

迭代很容易理解。

它只是意味着遍历一系列元素。

下面是一些简单的例子:

  • 遍历字符串
  • 遍历数组

遍历字符串

可以使用 for..of 循环遍历字符串的元素:

实例

const name = "W3School";

for (const x of name) {
  // 要执行的代码块
}
运行实例 »

点击 "运行实例" 按钮查看在线实例

遍历数组

可以使用 for..of 循环遍历数组的元素:

例子 1

const letters = ["a","b","c"];

for (const x of letters) {
  // 要执行的代码块
}
运行实例 »

点击 "运行实例" 按钮查看在线实例

例子 2

const numbers = [2,4,6,8];

for (const x of numbers) {
  // 要执行的代码块
}
运行实例 »

点击 "运行实例" 按钮查看在线实例

遍历 Set

可以使用 for..of 循环遍历 Set 的元素:

实例

const letters = new Set(["a","b","c"]);

for (const x of letters) {
  // 要执行的代码块
}
运行实例 »

点击 "运行实例" 按钮查看在线实例

注释:我们将在后续章节中详细介绍 Set 和 Map。

遍历 Map

可以使用 for..of 循环遍历 Map 的元素:

实例

const fruits = new Map([
  ["apples", 500],
  ["bananas", 300],
  ["oranges", 200]
]);

for (const x of fruits) {
  // 要执行的代码块
}
运行实例 »

点击 "运行实例" 按钮查看在线实例

JavaScript 迭代器

迭代器协议定义了如何从对象中生成一系列值

当对象实现了 next() 方法时,它就成为迭代器

next() 方法必须返回一包含两个属性的对象:

  • value(下一个值)
  • done(true 或 false)
value

迭代器返回的值。

如果 done 为 true,则可以省略。

done

如果迭代器已完成,则为 true。

如果迭代器生成了新值,则为 false。

注意:

从技术上讲,可迭代对象必须实现 Symbol.iterator 方法。

字符串、数组、TypedArray、Map 和 Set 都是可迭代对象,因为它们的原型对象具有 Symbol.iterator 方法。

自定义可迭代对象

下例展示了一个自定义的可迭代对象,它永远不会结束,每次调用 next() 都会返回 10, 20, 30, 40, ...:

实例

// 自定义可迭代对象
function myNumbers() {
  let n = 0;
  return {
    next: function() {
      n += 10;
      return { value: n, done: false };
    }
  };
}

// 创建可迭代对象
const n = myNumbers();
n.next(); // 返回 10
n.next(); // 返回 20
n.next(); // 返回 30
运行实例 »

点击 "运行实例" 按钮查看在线实例

问题是:

自定义的可迭代对象不支持 JavaScript 的 for..of 语句。

支持 for..of 的可迭代对象

JavaScript 可迭代对象是拥有 Symbol.iterator 的对象。

Symbol.iterator 是一个返回 next() 方法的函数。

可以使用以下代码对可迭代对象进行迭代:

for (const x of iterable) { }

实例

// 创建一个对象
myNumbers = {};

// 使其可迭代
myNumbers[Symbol.iterator] = function() {
  let n = 0;
  done = false;
  return {
    next() {
      n += 10;
      if (n == 100) { done = true; }
      return { value: n, done: done };
    }
  };
};

// 现在可以使用 for..of
for (const num of myNumbers) {
  // 任意代码
}
运行实例 »

点击 "运行实例" 按钮查看在线实例

Symbol.iterator 方法会被 for..of 自动调用。

但我们也可以手动调用它:

实例

let iterator = myNumbers[Symbol.iterator]();

while (true) {
  const result = iterator.next();
  if (result.done) break;
  // 任意代码
}
运行实例 »

点击 "运行实例" 按钮查看在线实例

相关

视频

RELATED VIDEOS

更多

免费

Web前端开发极速入门
初级 Web前端开发极速入门

219920次学习

收藏

免费

前端入门_HTML5
初级 前端入门_HTML5

616946次学习

收藏

免费

30分钟学会网站布局
初级 30分钟学会网站布局

238440次学习

收藏

免费

CSS视频教程-玉女心经版
初级 CSS视频教程-玉女心经版

393054次学习

收藏

免费

独孤九贱(1)_HTML5视频教程

免费

独孤九贱(6)_jQuery视频教程

免费

独孤九贱(7)_Bootstrap视频教程

免费

独孤九贱(2)_CSS视频教程
初级 独孤九贱(2)_CSS视频教程

229605次学习

收藏

科技资讯

更多

精选课程

更多
前端入门_HTML5
前端入门_HTML5

共29课时

61.7万人学习

CSS视频教程-玉女心经版
CSS视频教程-玉女心经版

共25课时

39.3万人学习

JavaScript极速入门_玉女心经系列
JavaScript极速入门_玉女心经系列

共43课时

70.9万人学习

独孤九贱(1)_HTML5视频教程
独孤九贱(1)_HTML5视频教程

共25课时

61.6万人学习

独孤九贱(2)_CSS视频教程
独孤九贱(2)_CSS视频教程

共22课时

23万人学习

独孤九贱(3)_JavaScript视频教程
独孤九贱(3)_JavaScript视频教程

共28课时

33.9万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时

125万人学习

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

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