登录
首页 >  文章 >  前端

JavaScript迭代器是什么?如何创建可迭代对象?

时间:2025-12-18 13:24:28 186浏览 收藏

推广推荐
免费电影APP ➜
支持 PC / 移动端,安全直达

珍惜时间,勤奋学习!今天给大家带来《JavaScript迭代器是什么?如何实现可迭代对象?》,正文内容主要涉及到等等,如果你正在学习文章,或者是对文章有疑问,欢迎大家关注我!后面我会持续更新相关内容的,希望都能帮到正在学习的大家!

迭代器是定义序列遍历方式的对象,必须有返回{value, done}对象的next()方法;可迭代对象需实现[Symbol.iterator]方法并返回迭代器,才能被for...of等语法消费。

javascript中的迭代器是什么_如何实现可迭代对象?

JavaScript 中的迭代器(Iterator)是一个对象,它定义了序列中值的遍历方式;而可迭代对象(Iterable)是指实现了 [Symbol.iterator] 方法的对象,该方法必须返回一个迭代器。简单说:可迭代对象能被 for...of、展开运算符(...)、解构等语法消费,前提是它提供标准的迭代器接口。

迭代器长什么样?

一个迭代器对象必须有一个 next() 方法,每次调用返回形如 { value: ..., done: true|false } 的对象:

  • value:当前迭代出的值(可以是任意类型,包括 undefined
  • done:布尔值,true 表示迭代结束,后续调用应始终返回 { value: undefined, done: true }

例如手动创建一个简单迭代器:

const iterator = {
  items: ['a', 'b', 'c'],
  index: 0,
  next() {
    if (this.index       return { value: this.items[this.index++], done: false };
    }
    return { value: undefined, done: true };
  }
};

console.log(iterator.next()); // { value: 'a', done: false }
console.log(iterator.next()); // { value: 'b', done: false }
console.log(iterator.next()); // { value: 'c', done: false }
console.log(iterator.next()); // { value: undefined, done: true }

如何让一个对象变成可迭代对象?

只需在对象上定义 [Symbol.iterator] 方法,且该方法返回一个符合迭代器协议的对象:

const myRange = {
  from: 1,
  to: 3,
  [Symbol.iterator]() {
    let current = this.from;
    const last = this.to;
    return {
      next() {
        if (current           return { value: current++, done: false };
        }
        return { value: undefined, done: true };
      }
    };
  }
};

for (const num of myRange) {
  console.log(num); // 1, 2, 3
}
console.log([...myRange]); // [1, 2, 3]

更简洁的实现方式:用生成器函数

生成器函数(function*)天然返回迭代器,是实现可迭代对象最常用、最推荐的方式:

const myRange = {
  from: 10,
  to: 12,
  *[Symbol.iterator]() {
    for (let i = this.from; i       yield i;
    }
  }
};

console.log([...myRange]); // [10, 11, 12]

生成器内部自动处理 valuedone,逻辑清晰,不易出错。

哪些内置类型默认可迭代?

以下类型原生实现了 [Symbol.iterator],因此可直接用于 for...of 等场景:

  • Array、TypedArray
  • String(按 UTF-16 编码单元,注意代理对)
  • Map、Set
  • arguments 对象(非箭头函数内)
  • NodeList 等 DOM 集合(现代浏览器)

注意:Object 默认不可迭代,想遍历其属性需用 Object.keys()Object.entries() 等转成数组再迭代。

基本上就这些。核心就两点:迭代器有 next(),可迭代对象有 [Symbol.iterator]。用好生成器,实现起来很自然。

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《JavaScript迭代器是什么?如何创建可迭代对象?》文章吧,也可关注golang学习网公众号了解相关技术文章。

相关阅读
更多>
最新阅读
更多>
课程推荐
更多>