导航
×
   ❮   
HTML CSS JavaScript PHP Go Sass W3C Colors ECMS

JS 教程

JS 简介 JS 如何使用 JS 输出 JS 语法 JS 语句 JS 注释 JS 变量 JS 运算符 JS 条件语句 JS 循环 JS 字符串 JS 数字 JS 函数 JS 对象 JS 日期 JS 数组 JS 类型化数组 JS 集合 JS Map 映射 JS Math JS 正则表达式 JS 数据类型 JS 错误 JS 事件 JS 编程 JS 关键字参考 JS 保留关键字参考 JS 运算符参考 JS 运算符优先级 JS UTF-8 字符 JS UTF-8 符号 JS UTF-8 表情符号 JS 版本

JS 高级教程

JS 对象 JS 函数 JS 类 JS 迭代 JS Promises JS 模块

JavaScript Iterables 可迭代对象


可迭代对象可以使用 for...of 循环进行迭代

for...of 循环

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

语法

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

迭代

迭代是指遍历一系列元素。

以下是一些示例:

  • 遍历字符串
  • 遍历数组
  • 遍历集合
  • 遍历映射

遍历字符串

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

示例

const name = "W3Schools";

for (const x of name) {
  // 待执行的代码块
}
亲自试一试 »

遍历数组

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

Example 1

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

for (const x of letters) {
  // 待执行的代码块
}
亲自试一试 »

Example 2

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

for (const x of numbers) {
  // 待执行的代码块
}
亲自试一试 »

遍历集合

您可以使用for...of循环来遍历集合中的元素:

示例

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

for (const x of letters) {
  // 待执行的代码块
}
亲自试一试 »

遍历 Map

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

示例

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

for (const x of fruits) {
  // 待执行的代码块
}
亲自试一试 »

JavaScript 迭代器

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

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

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

  • value (the next value)
  • done (true or false)
value 迭代器返回的值
(如果 done 为 true,则可以省略)
done true 如果迭代器已完成
false 如果迭代器已生成新值

注意

严格来说,可迭代对象必须实现 Symbol.iterator 方法。

在 JavaScript 中,以下是可迭代对象:

  • 字符串
  • 数组
  • 类型化数组
  • 集合
  • 映射

因为它们的原型对象有一个 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(); // Returns 10
n.next(); // Returns 20
n.next(); // Returns 30
亲自试一试 »

注意

自建可迭代对象不支持 JavaScript 的 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) {
  // Any Code Here
}
亲自试一试 »

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

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

示例

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

while (true) {
  const result = iterator.next();
  if (result.done) break;
  // Any Code Here
}
亲自试一试 »

注意

迭代器提供了一种受控的方式来处理数据序列,从而能够为各种数据结构实现自定义迭代逻辑

下一章将介绍 ECMAScript 2025 中引入的新的迭代器辅助函数


Copyright ©2020-2026 freew3c.com All Rights Reserved 提供的内容仅用于学习和测试,不保证内容的正确性。