javascript中的迭代器是什么_如何实现可迭代对象?
发布时间 - 2025-12-27 00:00:00 点击率:次迭代器是定义序列遍历方式的对象,必须有返回{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] 方法,且该方法返回一个符合迭代器协议的对象:
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*)天然返回迭代器,是实现可迭代对象最常用、最推荐的方式:
from: 10,
to: 12,
*[Symbol.iterator]() {
for (let i = this.from; i yield i;
}
}
};
console.log([...myRange]); // [10, 11, 12]
生成器内部自动处理 value 和 done,逻辑清晰,不易出错。
哪些内置类型默认可迭代?
以下类型原生实现了 [Symbol.iterator],因此可直接用于 for...of 等场景:
- Array、TypedArray
- String(按 UTF-16 编码单元,注意代理对)
- Map、Set
- arguments 对象(非箭头函数内)
- NodeList 等 DOM 集合(现代浏览器)
注意:Object 默认不可迭代,想遍历其属性需用 Object.keys()、Object.entries() 等转成数组再迭代。
基本上就这些。核心就两点:迭代器有 next(),可迭代对象有 [Symbol.iterator]。用好生成器,实现起来很自然。
# javascript
# java
# 可迭代对象
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
微信小程序 配置文件详细介绍
Midjourney怎么调整光影效果_Midjourney光影调整方法【指南】
如何在自有机房高效搭建专业网站?
Laravel如何生成URL和重定向?(路由助手函数)
iOS正则表达式验证手机号、邮箱、身份证号等
html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】
Android滚轮选择时间控件使用详解
手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?
Zeus浏览器网页版官网入口 宙斯浏览器官网在线通道
Laravel如何实现API版本控制_Laravel版本化API设计方案
Laravel中间件如何使用_Laravel自定义中间件实现权限控制
零基础网站服务器架设实战:轻量应用与域名解析配置指南
如何在IIS中新建站点并配置端口与物理路径?
利用vue写todolist单页应用
javascript中的try catch异常捕获机制用法分析
Laravel如何处理表单验证?(Requests代码示例)
弹幕视频网站制作教程下载,弹幕视频网站是什么意思?
米侠浏览器网页背景异常怎么办 米侠显示修复
Laravel怎么在Controller之外的地方验证数据
高端智能建站公司优选:品牌定制与SEO优化一站式服务
网站建设保证美观性,需要考虑的几点问题!
图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?
Laravel如何安装Breeze扩展包_Laravel用户注册登录功能快速实现【流程】
1688铺货到淘宝怎么操作 1688一键铺货到自己店铺详细步骤
微信小程序 wx.uploadFile无法上传解决办法
Python数据仓库与ETL构建实战_Airflow调度流程详解
Laravel路由怎么定义_Laravel核心路由系统完全入门指南
为什么php本地部署后css不生效_静态资源加载失败修复技巧【技巧】
三星、SK海力士获美批准:可向中国出口芯片制造设备
Laravel怎么使用Intervention Image库处理图片上传和缩放
Laravel怎么定时执行任务_Laravel任务调度器Schedule配置与Cron设置【教程】
iOS验证手机号的正则表达式
手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?
Laravel怎么清理缓存_Laravel optimize clear命令详解
EditPlus中的正则表达式 实战(4)
Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲
详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点
大同网页,大同瑞慈医院官网?
如何在万网开始建站?分步指南解析
如何在VPS电脑上快速搭建网站?
如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环
Laravel怎么集成Vue.js_Laravel Mix配置Vue开发环境
如何用花生壳三步快速搭建专属网站?
Linux系统命令中tree命令详解
音响网站制作视频教程,隆霸音响官方网站?
php后缀怎么变mp4格式错误_修改扩展名提示格式不对怎么办【技巧】
Laravel API资源(Resource)怎么用_格式化Laravel API响应的最佳实践
详解jQuery中的事件
作用域操作符会触发自动加载吗_php类自动加载机制与::调用【教程】
如何在阿里云通过域名搭建网站?

