es6 Iterator

11.Iterator
Iterator遍历器
概念:iterator是一种接口机制,为各种不同的数据结构提供统一访问机制
作用:
1.为各种数据结构提供一个统一的、简便的访问接口
2.使得数据结构的成员能够按照某种次序排列
3.es6创造了一种新的遍历命令for…of 循环,Iterator接口主要供for …of 消费
工作原理:
创建一个指针对象(遍历器对象),指向数据结构的起始位置
第一次使用next方法,指针自动指向数结构的第一个成员
接下来不断调用next方法,指针就会一直向后移动,直到指针指向最后一个成员
每调用next方法返回的是一个包含value和done的对象,{value:当前成员的值,done:布尔值}
value表示当前成员的值,done对应的布尔值表示当前的数据的结构是否遍历结束
当遍历结束的时候返回value的值是undefined,done值为true
原生具备iterator接口的数据(可用for of 遍历)
扩展理解:
1,当数据结构上部署了Symbol.iterator接口,该数据就是可以用 for of调用
2.当使用for of 去遍历目标数据的时候,该数据会自动去找Symbol.iterator属性
//Symbol.iterator属性指向对象的默认遍历器方法。
1.Array
2.arguments
3.set容器
4.map容器
5.String

<script type="text/javascript">
			//模拟指针对象(遍历器对象)
			function myIterator(arr){ //iterator接口
				let nextIndex = 0;//记录指针位置
					return{ //遍历器对象
						next:function(){
							return nextIndex < arr.length ?{value:arr[nextIndex++],done:false} : {value:undefined,done:true} 
						}
					}
			}
			//准备一个数据
			let arr =[1,98,"hhh"]
			let iteratorObj = myIterator(arr)
			console.log(iteratorObj.next())  //{value: 1,done:false}
			console.log(iteratorObj.next()) //{value: 98,done:false}
			console.log(iteratorObj.next())  //{value: hhh,done:false}
			console.log(iteratorObj.next())  //{value: undefined,done:true}
			
			
			
			
			//将iterator接口部署到指定的数据类型上,可以使用for of 遍历
			//数组,字符串,arguments,set容器,map容器
			for(let i of arr){
				console.log(i)
			}//输出 1 98 hhh
			
			let str="abcd"
			for(let i of str){
				console.log(i)
			}//输出a b c d 
			
			function foo(){
				for(let i of arguments){  //arguments伪数组,没有一般数组的方法
					console.log(i)
				}
			}
			foo(7,"ab")  //输出 7 ab
			
			
			//object没有iterator.	Symbol.iterator属性指向对象的默认遍历器方法。
			let obj = {name: "tom", age: 12}
			
			//等同于在指定的数据内结构上部署了iterator接口
			//当使用for of 去遍历某个数据结构的时候,首先去找Symbol.iterator  找到就去遍历,没有找到就不能遍历xxx is not iterable
			let targetData ={
				[Symbol.iterator]:function(){
					let nextIndex = 0;
					return{ //遍历器对象
						next:function(){
							return nextIndex < this.length ?{value:this[nextIndex++],done:false} : {value:undefined,done:true} 
						}
					}
				}
			}
			
			//使用三点运算符,解构赋值,默认去调用iterator接口
		
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值