JavaScript迭代器如何工作_如何自定义迭代器?

admin 百科 13
JavaScript迭代器核心是next()方法,返回{value, done}对象;实现[Symbol.iterator]()的对象为可迭代对象,供for...of等消费;生成器函数可简化迭代器创建。

JavaScript迭代器如何工作_如何自定义迭代器?-第1张图片-佛山资讯网

JavaScript迭代器的核心是next()方法,它每次调用返回一个形如{ value: ..., done: true|false }的对象。只要对象有这个next方法,它就是一个迭代器;而实现了[Symbol.iterator]()方法的对象,则是可迭代的(比如数组、字符串、Map等),能被for...of、展开运算符、解构等语法消费。

迭代器的工作机制

迭代器本质是一个状态机:内部维护当前遍历位置和是否结束的状态。next()被调用时,它推进状态、返回当前值,并标记是否已完成。

  • 第一次调用next(),通常返回第一个元素,done: false
  • 持续调用直到某次返回{ value: undefined, done: true },表示遍历结束
  • for...of会自动反复调用next(),直到donetrue才停止
  • 如果迭代器中途抛错,或next()返回格式错误(如缺valuedone),会中断遍历

手动创建一个简单迭代器

只需写一个函数,返回带next()方法的对象:

function createRangeIterator(start, end) {
  let current = start;
  return {
    next() {
      if (current < end) {
        return { value: current++, done: false };
      } else {
        return { value: undefined, done: true };
      }
    }
  };
}

const it = createRangeIterator(1, 4);
console.log(it.next()); // { value: 1, done: false }
console.log(it.next()); // { value: 2, done: false }
console.log(it.next()); // { value: 3, done: false }
console.log(it.next()); // { value: undefined, done: true }

登录后复制

让对象支持for...of:实现[Symbol.iterator]

给任意对象添加[Symbol.iterator]方法,就能让它变成可迭代对象:

立即学习“Java免费学习笔记(深入)”;

标签: javascript java 可迭代对象

发布评论 0条评论)

还木有评论哦,快来抢沙发吧~