讲师中心 微信公众号
AI工具推荐 视频效率加速

javascript迭代器和生成器是什么_如何自定义可迭代对象?

胖敏君_4851

胖敏君_4851

发布时间:2025-12-17 08:37:02

|

472人浏览过

|

来源于php中文网

原创

JavaScript中迭代器是含next()方法的对象,返回{value,done};生成器是简化迭代器创建的函数,用yield声明值。自定义可迭代对象需实现[Symbol.iterator]()返回新迭代器,确保惰性求值和多次调用互不干扰。

javascript迭代器和生成器是什么_如何自定义可迭代对象?

JavaScript 中的迭代器(Iterator)和生成器(Generator)是处理序列数据的两种核心机制,它们让对象能被 for...of、解构赋值、扩展运算符(...)等语法自然消费。自定义可迭代对象,关键在于实现一个符合规范的 [Symbol.iterator]() 方法,返回一个迭代器对象。

迭代器是什么?

迭代器是一个具有 next() 方法的对象,每次调用返回形如 { value, done } 的结果:

  • value:当前迭代项的值(可以是任意类型)
  • done:布尔值,true 表示迭代结束,false 表示还有值

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

const counter = {
  [Symbol.iterator]() {
    let i = 0;
    return {
      next() {
        if (i < 3) {
          return { value: i++, done: false };
        } else {
          return { value: undefined, done: true };
        }
      }
    };
  }
};

for (const n of counter) console.log(n); // 0, 1, 2

生成器函数:更简洁的迭代器工厂

生成器函数用 function* 声明,内部用 yield 暂停执行并产出值。调用后返回一个生成器对象(它本身就是一个迭代器):

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

Alibabacloud Sdk Client Initialization For Java
Alibabacloud Sdk Client Initialization For Java

在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。

下载
  • 每次 next() 调用恢复执行,直到下一个 yield 或函数结束
  • 自动处理 donevalue,无需手动构造返回对象
  • 支持 yield* 委托其他可迭代对象

改写上面的例子:

const counter = {
  *[Symbol.iterator]() {
    yield 0;
    yield 1;
    yield 2;
  }
};

如何自定义可迭代对象?

只要对象的 [Symbol.iterator] 方法返回一个有效迭代器,它就是可迭代的。常见方式有:

  • 直接在对象字面量中定义 [Symbol.iterator]()(如上例)
  • 在类中定义该方法,使实例可迭代
  • 复用已有的可迭代结构,比如用 yield* 委托数组或 Map

例如让一个类支持遍历其内部数据:

class Countdown {
  constructor(n) {
    this.n = n;
  }
  *[Symbol.iterator]() {
    for (let i = this.n; i > 0; i--) {
      yield i;
    }
  }
}

for (const x of new Countdown(3)) console.log(x); // 3, 2, 1

注意点和常见误区

自定义时需确保迭代器行为符合预期:

  • 迭代器应是“惰性求值”的,next() 调用才计算下一个值
  • 多次调用 [Symbol.iterator]() 应返回**新迭代器**(否则 for...of 多次使用会互相干扰)
  • 一旦 done: true,后续 next() 仍应返回 { value: undefined, done: true }
  • 生成器函数中 return 的值会作为最后一次 next()value(但 done 仍为 true

基本上就这些。不复杂但容易忽略细节,关键是理解 next() 协议和 [Symbol.iterator] 的桥梁作用。

相关文章

java速学教程(入门到精通)
java速学教程(入门到精通)

java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

相关专题

更多
java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

5724

2023.10.24

Go语言中的运算符有哪些
Go语言中的运算符有哪些

Go语言中的运算符有:1、加法运算符;2、减法运算符;3、乘法运算符;4、除法运算符;5、取余运算符;6、比较运算符;7、位运算符;8、按位与运算符;9、按位或运算符;10、按位异或运算符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2324

2024.02.23

php三元运算符用法
php三元运算符用法

本专题整合了php三元运算符相关教程,阅读专题下面的文章了解更多详细内容。

1592

2025.10.17

golang map内存释放
golang map内存释放

本专题整合了golang map内存相关教程,阅读专题下面的文章了解更多相关内容。

410

2025.09.05

golang map相关教程
golang map相关教程

本专题整合了golang map相关教程,阅读专题下面的文章了解更多详细内容。

323

2025.11.16

golang map原理
golang map原理

本专题整合了golang map相关内容,阅读专题下面的文章了解更多详细内容。

473

2025.11.17

java判断map相关教程
java判断map相关教程

本专题整合了java判断map相关教程,阅读专题下面的文章了解更多详细内容。

243

2025.11.27

undefined是什么
undefined是什么

undefined是代表一个值或变量不存在或未定义的状态。它可以作为默认值来判断一个变量是否已经被赋值,也可以用于设置默认参数值。尽管在不同的编程语言中,undefined可能具有不同的含义和用法,但理解undefined的概念可以帮助我们更好地理解和编写程序。本专题为大家提供undefined相关的各种文章、以及下载和课程。

11485

2023.07.31

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

0

2026.09.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WebStorm 官方调试文档
WebStorm 官方调试文档

共0课时 | 0人学习

React 教程
React 教程

共58课时 | 11.9万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 6.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn