新闻中心
什么是迭代器_j*ascript中如何自定义迭代?
迭代器是J*aScript中按需遍历数据的机制,核心是实现[Symbol.iterator]方法返回含next()的对象,每次调用返回{value, done};可借助生成器函数快速创建,yield产出值,自动满足迭代协议。

迭代器是 J*aScript 中一种统一遍历数据结构的机制,它允许你按需逐个获取集合中的值,而无需一次性加载全部内容。核心在于实现 [Symbol.iterator] 方法,返回一个具有 next() 方法的对象,每次调用 next() 返回 { value, done } 形式的对象。
迭代器的基本结构
一个合法的迭代器对象必须满足:
-
next()方法必须存在,且每次调用返回{ value: any, done: boolean } -
done: true表示遍历结束,之后的next()调用仍应返回{ value: undefined, done: true } - 可选地支持
return()(用于提前终止)和throw()(用于错误注入),但非必需
为普通对象添加自定义迭代
默认情况下,普通对象不可被 for...of 遍历。只需在对象上部署 [Symbol.iterator] 方法即可:
示例:让对象按属性名顺序迭代键值对
立即学习“J*a免费学习笔记(深入)”;
DeepBrain
AI视频生成工具,ChatGPT +生成式视频AI =你可以制作伟大的视频!
146
查看详情
const obj = { a: 1, b: 2, c: 3 };
obj[Symbol.iterator] = function* () {
for (const key of Object.keys(this).sort()) {
yield [key, this[key]];
}
};
<p>for (const [k, v] of obj) {
console.log(k, v); // 'a' 1, 'b' 2, 'c' 3
}用生成器函数快速创建迭代器
生成器函数(function*)天然返回符合迭代器协议的对象,是最简洁的自定义方式:
- 函数体中用
yield暂停并产出值 - 每次调用
next()从上次暂停处继续执行 - 函数返回后自动设
done: true
示例:实现一个范围迭代器
function* range(start, end) { for (let i = start; i < end; i++) { yield i; } } <p>const iter = range(2, 5); console.log(iter.next()); // { value: 2, done: false } console.log(iter.next()); // { value: 3, done: false } console.log([...range(0, 3)]); // [0, 1, 2]
迭代器与可迭代协议的区别
注意两个概念不等价:
-
迭代器:是那个有
next()方法的对象(如range(0,3)的返回值) -
可迭代对象:是实现了
[Symbol.iterator]方法的对象(如数组、字符串、或上面加了该方法的obj) - 所有可迭代对象可通过
for...of、展开运算符、Array.from()等使用;迭代器本身通常只直接调用next()
基本上就这些。自定义迭代不复杂但容易忽略协议细节,关键是守住 next() 的返回格式和 done 的语义。
以上就是什么是迭代器_j*ascript中如何自定义迭代?的详细内容,更多请关注其它相关文章!
# 表单
# 泉州网站推广找哪家
# 西昌网站权重优化
# seo优化学习心得
# 抖音seo工程
# 营销推广不做官网可以吗
# 保定推广员招聘信息网站
# 世纪百捷线上推广网站
# 数字营销好推广吗知乎
# 贵州整站优化seo平台
# 关键词排名有名 乐云seo包效果
# 按需
# 如何实现
# javascript
# 它是
# 运算符
# 键值
# 数据结构
# 遍历
# 自定义
# 迭代
# 可迭代对象
# 键值对
# 区别
# java
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
Python vgamepad库按键模拟:正确使用XUSB_BUTTON常量
一加 Nord 5 隐私权限异常_一加 Nord 5 系统安全优化
QQ邮箱在线使用入口 QQ邮箱个人账号网页版登录
TikTok网页版直接登录 TikTok网页端官方平台入口
在Pyomo中实现基于变量的条件约束:Big-M方法详解
在J*a中如何使用Stream.map转换元素_Stream映射操作解析
微博网页版怎么开启两步验证_微博网页版账号安全两步验证设置方法
如何创建没有密码的Windows本地账户_跳过微软账户登录的技巧【教程】
Win11怎么设置鼠标主按键_Win11鼠标左右键功能互换
Composer中的^和~符号代表什么_精通Composer版本号语义化约束
ArrayList与LinkedList操作复杂度详解:遍历与修改
微信聊天记录怎么加密_微信聊天记录加密方法
Python字典中优雅地迭代剩余元素的方法
怎么在mac上运行html代码_mac运行html代码方法【指南】
初次安装JDK时环境变量如何正确配置_J*A_HOME与PATH设置规则讲解
铃兰之剑为这和平的世界希里技能组及加点推荐
cad怎么合并重叠的线段_cad清理重复重叠线条的操作方法
Win11怎么设置鼠标指针速度_Win11提高鼠标指针精确度选项
解决Bootstrap卡片顶部边距导致背景图下移的问题
动漫花园资源网使用步骤_动漫花园资源网下载流程
win11如何加载ICC颜色配置文件 Win11校色文件安装与显示器色彩管理【指南】
探索高级语言到原生C/C++的转译:挑战与内存管理策略
j*a toString()的覆盖
PDF怎么合并PDF并保持格式_PDF合并文件保持排版教程
mcjs网页版在线存档 mcjs云存档登录入口
铁路12306改签能改到更早的车次吗_铁路12306改签提前车次规则
PHP高效扁平化嵌套数组:使用array_merge与数组解包操作符
深入理解与实现最大堆的Heapify过程:常见错误与修正
如何使用Rector自动化升级旧代码_通过Composer安装和配置Rector进行代码重构
抓大鹅无需下载版 抓大鹅秒玩版入口
qq浏览器如何查看和导出已保存的密码 qq浏览器密码管理器数据备份教程
在J*a中如何使用BigDecimal进行高精度计算_BigDecimal类应用指南
css子元素高度不一致导致布局错位怎么办_使用align-items:stretch解决高度差异
快速CSGO开箱网站指南 CSGO开箱平台推荐
谷歌学术网站直达地址 谷歌学术搜索网页版一键进入
俄罗斯方块最新版入口 俄罗斯方块在线玩官网入口
Go Martini框架:动态服务解码后的图片内容
GemBox Document HTML转PDF垂直文本渲染问题及解决方案
Golang如何实现微服务鉴权与权限控制_Golang微服务鉴权与权限管理实践
黑猫投诉统一入口官网 消费者权益保护投诉平台
QQ邮箱网页版登录入口 QQ邮箱官方在线使用平台
J*a中实现Go语言select通道多路复用机制
必由学在线入口 必由学网页版快速登录入口
PHP URL参数传递与500错误调试指南
React Hooks最佳实践:动态组件状态管理的组件化方案
一加Ace 6T实拍样张首次公布!李杰:主摄实力完全看齐4K档性能旗舰
Composer的 archive 命令怎么用_快速打包你的PHP项目及其Composer依赖
Composer如何处理Git子模块(submodule)依赖_Composer与Git Submodule的对比与选择
在React函数组件中利用原生HTML5进行邮箱地址验证
Django通过AJAX异步上传图片并保存至模型的完整指南


2025-12-13
浏览次数:次
返回列表
tart, end) {
for (let i = start; i < end; i++) {
yield i;
}
}
<p>const iter = range(2, 5);
console.log(iter.next()); // { value: 2, done: false }
console.log(iter.next()); // { value: 3, done: false }
console.log([...range(0, 3)]); // [0, 1, 2]