迭代器和生成器

目录

1、迭代器(Iterator)

2、生成器(Generator )

3、可迭代对象 

内置可迭代对象:

用于可迭代对象的语法

4、迭代器和生成器的区别


1、迭代器(Iterator)

通过使用 next() 方法实现了迭代器协议的任何一个对象,该方法返回具有两个属性的对象:

value:迭代序列的下一个值

done:如果迭代器能够生成序列中的下一个值,则返回 false 布尔值;

           如果迭代器已将序列迭代完毕,则为 true

2、生成器(Generator )

使用function*语法声明,并且可以使用yield关键字来暂停和恢复函数的执行。每次调用生成器的next()方法时,函数会从上次yield的位置继续执行,直到遇到下一个yield或函数结束。

3、可迭代对象 

为了实现可迭代,对象必须实现 [Symbol.iterator]() 方法,可迭代对象(或其原型链中的任意一个对象)必须具有一个键值为 Symbol.iterator 的属性。

内置可迭代对象:

StringArrayTypedArrayMap 和 Set 

用于可迭代对象的语法

 for...of 循环、展开语法yield* 和解构语法

for (let value of ["a", "b", "c"]) {
  console.log(value);
}
// "a"
// "b"
// "c"

[..."abc"]; // ["a", "b", "c"]

function* gen() {
  yield* ["a", "b", "c"];
}

gen().next(); // { value: "a", done: false }

[a, b, c] = new Set(["a", "b", "c"]);
a; // "a"

4、迭代器和生成器的区别

定义方式:迭代器通常是通过实现Symbol.iterator方法来定义的,而生成器则是通过function*语法声明的特殊函数。

执行方式:迭代器是通过调用next()方法来逐个访问序列中的元素,而生成器则是通过yield关键字来暂停和恢复函数的执行。

用途:迭代器主要用于遍历集合中的元素,而生成器则更适用于处理异步操作或按需生成数据序列。

灵活性:生成器相比迭代器提供了更高的灵活性,因为它可以在函数内部定义复杂的迭代逻辑,并且可以通过yieldnext()方法的参数进行值的传递和接收。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值