【ES】笔记-迭代器

迭代器概念

迭代器(Iterator)是一种接口,为各种不同的数据结构提供统一的访问机制。任何数据结构只要部署Iterator接口,就可以完成遍历操作。

  1. ES6 创造了一种新的遍历命令for...of循环,Iterator接口主要供for...of消费
  2. 原生具备iterator接口的数据(可用for of 遍历)
    a) Array
    b) Arguments
    c) Set
    d) Map
    e) String
    f) TypedArray
    g) NodeList
  3. 工作原理
    a) 创建一个指针对象,指向当前数据结构的起始位置
    b) 第一次调用对象的next方法,指针自动指向数据结构的第一个成员
    c) 接下来不断调用next方法,指针一直往后移动,直到指向最后一个成员
    d) 每调用next方法返回一个包含value和done属性的对象
    注: 需要自定义遍历数据的时候,要想到迭代器。

数组迭代

javascript 复制代码
    <script>
        //声明一个数组
        const xiyou=['唐僧','孙悟空','猪八戒','沙僧'];

        //使用for.. of 遍历数组
        for(let v of xiyou){
            console.log(v)
        } 

        let iterator=xiyou[Symbol.iterator]();

        //调用对象的next方法
        console.log(iterator.next());
        console.log(iterator.next());
        console.log(iterator.next());
        console.log(iterator.next());
        console.log(iterator.next());

    </script>

非原生数据对象的自定义实现

javascript 复制代码
    <script>
        //声明一个对象
        const banji = {
            name: "终极一班",
            stus: [
                'xiaoming',
                'xiaoning',
                'xiaotian',
                'knight'
            ],
            [Symbol.iterator]() {
                //索引变量
                let index = 0;
                // 保存this
                let _this = this;
                return {
                    next: function () {  //也可以采用箭头函数,就不需要外层保存this
                        if (index < _this.stus.length) {
                            const result = { value: _this.stus[index], done: false };
                            //下标自增
                            index++;
                            //返回结果
                            return result;
                        }else{
                            return {value: undefined, done: true};
                        }
                    }
                };
            }
        }

        //遍历这个对象 
        for (let v of banji) {
            console.log(v);
        }
    </script>
相关推荐
charlie1145141913 小时前
CSS笔记4:CSS:列表、边框、表格、背景、鼠标与常用长度单位
css·笔记·学习·css3·教程
tjsoft3 小时前
汇通家具管理软件 1.0 试用笔记
笔记
卡提西亚4 小时前
C++笔记-10-循环语句
c++·笔记·算法
Cathy Bryant5 小时前
概率论直觉(一):大数定律
笔记·考研·数学建模
摇滚侠6 小时前
Spring Boot3零基础教程,Reactive-Stream 四大核心组件,笔记106
java·spring boot·笔记
✎ ﹏梦醒͜ღ҉繁华落℘6 小时前
FreeRTOS学习笔记(应用)-- 各种 信号量的应用场景
笔记·学习
星星火柴9366 小时前
笔记 | C++面向对象高级开发
开发语言·c++·笔记·学习
BeingACoder6 小时前
【SAA】SpringAI Alibaba学习笔记(一):SSE与WS的区别以及如何注入多个AI模型
java·笔记·学习·saa·springai
安全不再安全7 小时前
免杀技巧 - 早鸟注入详细学习笔记
linux·windows·笔记·学习·测试工具·web安全·网络安全
LBuffer8 小时前
破解入门学习笔记题三十八
笔记·学习