JavaScript 迭代器和生成器

本文详细介绍了JavaScript中可迭代对象的概念,包括其特征、如何创建迭代器、生成器的工作原理以及可迭代对象的forEach方法。重点讲解了数组、Map、Set等类型的可迭代性以及与Object的区别。
摘要由CSDN通过智能技术生成

可迭代对象

对于某种数据类型,如果它的元素可以按照确定的顺序进行有限的读取,那么我们认为这个数据类型是可迭代对象。所以,可迭代对象有两大关键特征:元素的数量是有限的;元素的顺序是确定的。

因此,数组、Map、Set都是可迭代类型。要特别注意两种类型:string是可迭代对象,里面的字符是它的元素;而Object类型不是可迭代对象,因为Object的元素的顺序是不确定的。

从可迭代对象创建迭代器

所有的可迭代对象都有一个[Symbol.iterator]()方法,使用该方法可以返回一个迭代器

const arr = [1,2,3]  
const iter = arr[Symbol.iterator]()  

返回的迭代器有一个next()方法,不断得弹出元素值,done属性为false表示还有值可以被弹出,直到done属性变为true表示至此所有元素已经“耗尽”:

iter.next()   //=> {value:1, done:false}
iter.next()  // => {value:2, done:false}
iter.next()  // => {value:3, done:true},元素耗尽
iter.next()  //=> {value:undefined ,done:true},后面的值都将是undefined

生成器

生成器的作用是生成一个自定义的可迭代对象,通过yield不断生成元素,通过return生成终止。生成器是一个函数,与普通函数的区别是在函数名称前面加上了一个星号。

function * generator() {
    yield 1
    yield 2
    return 3
}
const iter = generator()
iter.next()   //=> {value:1, done:false}
iter.next()  // => {value:2, done:false}
iter.next()  // => {value:3, done:true},元素耗尽
iter.next()  //=> {value:undefined ,done:true},后面的值都将是undefined

可迭代对象的forEach()方法

forEach()是大多数可迭代对象都具有的方法,forEach()方法接收一个回调函数作为参数,该函数接收三个参数:

element:可迭代对象的元素

index:该元素的索引位置

array/map/set:可迭代对象本身,可以根据当前可迭代对象的类型定义一个意义明显的参数名称。

const map = new Map().set('a',1).set('b',2).set('c',3)
map.forEach((element,index,map)=>{
console.log(`${index}的值是${element}`)
})
// 输出:
// 键a的值是1
// 键b的值是2
// 键c的值是3
  • 10
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值