0
点赞
收藏
分享

微信扫一扫

【JavaScript】用Symbol.iterator实现可迭代的对象

m逆光生长 2022-04-21 阅读 39

Symbol.iterator 为每一个对象定义了默认的迭代器。该迭代器可以被 for...of 循环使用。
ArrayMapSetString都有内置的迭代器,然而有些情况,你可能需要对一个对象进行迭代。这个时候,就可以用Symbol.iterator来自定义实现一个迭代器。

下面看第一种方式:

let obj = {
    0:123,
    1:456,
    2:789,
    length:3,
    [Symbol.iterator]:function(){
        let index = 0
        return {
            next(){ //迭代器返回的对象需要有next()方法
                return {
                    value:obj[index++],//value为迭代器生成的值
                    done:index > obj.length //迭代器的停止条件,done为true停止
                }
            }
        }
    }
}

for(var v of obj){
    console.log(v)
}
>> 123
>> 456
>> 789

复制代码到F12控制台,可以看出结果,输出了123、456、789

还可以用Generator函数实现,第二种:

var obj = {
    0:123,
    1:456,
    2:789,
    length:3,
    [Symbol.iterator]:function*(){
        let index = 0
        while(index < obj.length){
            yield obj[index++]
        }
    }
}

for(var v of obj){
    console.log(v)
}
>> 123
>> 456
>> 789

Generator函数返回一个生成器,并且它符合可迭代协议和迭代器协议,拥有next()方法。
复制代码到F12控制台,可以看出结果,同样也输出了123、456、789

对您有帮助的话,欢迎关注!!!

上一篇:vue3在setup的render渲染函数中如何使用slots(插槽)?

举报

相关推荐

0 条评论