ES6— iterator 和 for of 循环

1 篇文章 0 订阅

iterator 和 for of


iterator遍历器

function myiterator(arr){
            let index = 0   
            return {
                next: function(){
                    return index<arr.length?{value:arr[index++],done:'false'}:{value:undefined,done:true}
                }
            }
 }
        let arr = [1,2,a,b,6]
        let my = myiterator(arr)
        console.log(my.next())
        console.log(my.next())
        

iterator 是一个模拟指针对象(遍历器对象),其中包含一个next方法,return 返回一个包含value和done的对象,如上函数

value 的值为arr内的值,(如下图)第一次调用next()方法,指向数据结构的第一个, 调用一次 next() 就会向下走一次,以此类推,到最后一位再次调用next()时,就会变undefined,

done 的值为布尔值,默认为false,如下图) 第一次调用next()方法,指向数据结构的第一个, 调用一次 next() 就会向下走一次,以此类推,指到最后一位再次调用next()时,就会变true

上面 let index=0 相当于计数器,
return时的判断就是如果计数器数值不小于数组的长度,就说明走到尽头了,
直接返回 {value:undefined,done:true}




在这里插入图片描述

默认在起始位置,每调用一次 next( ) 指针就会向下执行,直到指向最后一位时,继续调用 next() 则会返回的 { value: undefined, done: true }

部署iterator接口

Iterator接口部署在数据结构的Symbol.iterator属性,Symbol.iterator属性本身也是函数。执行这个函数,就会返回一个遍历器。

将iterator接口部署到指定的数据类型上,可以使用for of 去遍历循环

let targetData= {
            [Symbol.iterator]: function(){
                let index = 0
                return {
                    next: function(){
                        return index<this.length?{value:this[index++],done:''}:{value:undefined,done:true}
                    }
                }
            }
}

for of 循环

当使用for of 去遍历某一个数据结构的时候,找到Iterator接口就遍历,找不报错

如下具备Iterator接口:

  1. Array

  2. Map

  3. Set

  4. String

  5. TypedArray

  6. 函数的argument对象

let arr1 = '1ad3'

for(let i of arr1){
            console.log(i)// -> 1, a, d, 3
}

let arr = [1,2,'a1','b',5,6]
for(let i of arr){
            console.log(i) //->1,2,a1,b,5,6
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值