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


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

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  # java  # 可迭代对象 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 网络优化76771 】 【 技术知识130152 】 【 IDC云计算60162 】 【 营销推广131313 】 【 AI优化88182 】 【 百度推广37138 】 【 网站推荐60173 】 【 精选阅读31334


相关推荐: 如何在 Go 中判断变量是否为函数类型  Win11怎么关闭通知中心_Windows11系统通知与专注助手设置  Python随机数生成_random模块说明【指导】  如何将文本文件中的竖排字符串转换为横排字符串  Bpmn 2.0的XML文件怎么画流程图  Win11怎么更改任务栏颜色_Windows11个性化重音色设置  Win10怎样清理C盘阿里旺旺缓存_Win10清理阿里旺旺缓存步骤【步骤】  如何在 Go 中正确测试带 Cookie 的 HTTP 请求  Windows10蓝屏代码DPC_WATCHDOG_VIOLATION_Win10死机修复指南  如何优化Golang程序CPU性能_Golang CPU密集型任务优化方法  Win10怎么卸载剪映_Win10彻底卸载剪映方法【步骤】  Win11 explorer.exe频繁崩溃_修复Win11资源管理器无限重启【步骤】  Python装饰器设计思路_功能增强机制说明【指导】  Win11怎样安装网易云音乐_Win11安装网易云教程【步骤】  Python解释执行模型_字节码流程说明【指导】  php8.4匿名类怎么用_php8.4匿名类创建与使用场景【介绍】  Win11输入法选字框不见了怎么办_Win11输入法修复与重置【教程】  Django 密码修改后会话失效的解决方案  如何使用Golang处理网络超时错误_Golang请求超时异常处理方法  php会话怎么开启_session_start函数的作用与使用时机【方法】  php下载安装后memory_limit怎么设置_内存限制调整【技巧】  Win11玩游戏全屏闪退怎么办_Win11全屏优化禁用设置【教程】  Win11怎么设置DNS服务器_Windows11修改网络适配器DNS优选  Windows 11怎么设置默认解压软件_Windows 11为ZIP/RAR文件指定默认打开程序  Windows10如何重置此电脑_Windows10电脑重置方法【步骤】  Linux怎么实现内网穿透_Linux安装Frp客户端与服务端配置【方法】  Win11怎么关闭右下角弹窗_Win11拦截系统通知广告【设置】  Windows10如何删除恢复分区_Win10 Diskpart命令强制删除分区  Win11怎么设置系统还原_Windows11系统属性保护设置  Python网页解析流程_html结构说明【指导】  如何开启Windows的远程服务器管理工具(RSAT)?(管理服务器)  如何使用Golang搭建本地API测试环境_快速验证接口功能  Mac的“调度中心”与“空间”怎么用_Mac多桌面高效管理【技巧】  Mac怎么查看活动监视器_理解Mac进程和资源占用【指南】  Win11怎么关闭开机声音_Win11系统启动提示音静音【教程】  如何使用Golang encoding/json解析JSON_Golang encoding/json解析与序列化示例  Linux如何安装Tomcat应用服务器_Linux环境部署与端口修改【教程】  Windows10系统怎么查看显卡型号_Win10 dxdiag显示选项卡  c# 在高并发场景下,委托和接口调用的性能对比  Drupal 中 HTML 链接被双重转义导致渲染异常的解决方案  如何在 Go 中可靠地测试含 time.Time 字段的结构体  Linux如何安装Golang环境_Linux下Go语言开发包配置【方法】  如何在Golang中处理URL参数_Golang URL参数解析与路由映射方法  如何在 Go 应用中实现自动错误恢复与进程重启机制  Windows怎样关闭Edge新标签页广告_Windows关闭Edge新标签页设置【步骤】  Win11怎么关闭透明效果_Windows11个性化颜色关闭透明  Win10如何更改网络连接_Windows10以太网属性IP配置  如何使用Golang配置安全开发环境_防止敏感信息泄露  如何在 Django 中修改用户密码后保持会话不丢失  php中::能访问全局变量吗_全局作用域与类作用域区分【操作】 

 2025-12-27

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

致胜网络推广营销网


致胜网络推广营销网

致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。

 915688610

 17370845950

 915688610@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.