JavaScript迭代器

本文详细讲解了如何实现迭代器,包括创建函数、使用next方法、数组和非数组对象的遍历,以及for...of循环的应用范围,涵盖了JavaScript中常见的数据结构和框架。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

迭代器的实现

首先定义iterator对象

function createIterator(items) {
    var i = 0;
    return {
        next: function () {
            var done = i >= items.length;
            var value = !done ? items[i++] : undefined;

            return {
                done: done,
                value: value
            }
        }
    }
}

var iterator = createIterator([1, 2, 3]);
//注意  这里的iterator是个对象,里面的next属性对应的是方法。
//下面都是调用的iterator的next方法,并没有重新建立对象。
console.log(iterator.next())
console.log(iterator.next())
console.log(iterator.next())
console.log(iterator.next())
//{ done: false, value: 1 }
//{ done: false, value: 2 }
//{ done: false, value: 3 }
//{ done: true, value: undefined }

直接遍历会报错(iterator is not iterable)

// for (let value of iterator) {
//     console.log(value)
// } //报错  iterator is not iterable

for of 遍历对象需要对象拥有Symbol.iterator的属性

iterator[Symbol.iterator] = function() {
    return createIterator([1, 2, 3])
}
for (let value of iterator) {
    console.log(value)
}//for of 遍历的其实是对象的 Symbol.iterator 属性,数组默认部署了iterator属性

除了数组之外,还有一些数据结构默认部署了 Symbol.iterator 属性。(console.log打印不出来)
所以 for…of 循环可以使用的范围包括:
1.数组
2.Set
3.Map
4.类数组对象,如arguments 对象、DOM NodeList对象
5.Generator 对象
6.字符串

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值