ES6初步了解迭代器

news/2024/7/11 1:44:09 标签: 1024程序员节, javascript, ecmascript, es6

迭代器是什么?
迭代器(iterator)是一种接口,为各种不同的数据结构提供统一的访问机制。任何数据结构只要部署 iterator 接口,就可以完成遍历操作
ES6创造了一种新的遍历方法for…of循环,iterator 接口主要供 for…of 使用
原生中具备 iterator 接口的数据(可用 for of 遍历)
Array 、Arguments 、Set 、Map 、 String 、TypedArray 、 NodeList

javascript">    // 声明一个数组
    const arr = [1,2,3,4,5]
    // 使用for...of
    for(let v of arr) {
        console.log(v) //1 2 3 4 5
    }
    console.log(arr)

在这里插入图片描述

工作原理:
1.创建一个指针对象,指向当前数据结构的起始位置

javascript">    const arr = [1,2,3,4,5]
    let iterator = arr[Symbol.iterator]()
    console.log(iterator)

在这里插入图片描述

2.第一次调用对象的 next 方法,指针自动指向数据结构的第一个成员

javascript">    const arr = [1,2,3,4,5]
    let iterator = arr[Symbol.iterator]()
    // 调用对象的next方法
    console.log(iterator.next())

在这里插入图片描述

3.接下来不断调用 next 方法,指针一直往后移动,直到指向最后一个成员

javascript">    const arr = [1,2,3,4,5]
    let iterator = arr[Symbol.iterator]()
    // 调用对象的next方法
    console.log(iterator.next())
    console.log(iterator.next())
    console.log(iterator.next())
    console.log(iterator.next())
    console.log(iterator.next())
    console.log(iterator.next())

在这里插入图片描述

4.每调用 next 方法返回一个包含 value 和 done属性对象
在这里插入图片描述
返回value与done

那我们什么时候需要用到迭代器呢?

当我们需要自定义遍历数据的时候,要用到迭代器

javascript">    // 声明一个对象
    const obj = {
        name:"张三",
        age:18,
        schoolmate:["李四","王五","赵六"]
    }
    // 使用for...of遍历对象
    for(let v of obj) {
        console.log(v) //报错 obj is not iterable
    }

我们发现我们for…of遍历不了对象,那我们就是想用for…of遍历对象怎么办
我们想取到对象里数组的每一个值

javascript">    // 声明一个对象
    const obj = {
        name:"张三",
        age:18,
        schoolmate:["李四","王五","赵六"],
        // 添加方法
        [Symbol.iterator](){
            // 索引变量
            let index = 0
            // 存一个this
            let _this = this
            // 返回一个对象
            return {
                // next方法
                next:function(){
                    if(index<_this.schoolmate.length){
                        // 需要控制,要不然一直为false一直执行
                        const result = {value:_this.schoolmate[index],done:false}
                        // 下标自增
                        index++
                        // 返回结果
                        return result
                    }else {
                        // // 如果我index大于等于了这个长度
                        return {value:undefined,done:true}
                    }
                    
                }
            }
        }
    }
    // 使用for...of遍历对象
    for(let v of obj) {
        console.log(v) //李四 王五 赵六
    }

感谢大家的阅读,如有不对的地方,可以向我提出,感谢大家!


http://www.niftyadmin.cn/n/5122290.html

相关文章

2023年【起重信号司索工(建筑特殊工种)】试题及解析及起重信号司索工(建筑特殊工种)操作证考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 起重信号司索工(建筑特殊工种)试题及解析根据新起重信号司索工(建筑特殊工种)考试大纲要求&#xff0c;安全生产模拟考试一点通将起重信号司索工(建筑特殊工种)模拟考试试题进行汇编&#xff0c;组成一套起重信号司索…

python---设计模式(单例模式和工厂模式)

单例模式 定义&#xff1a;保证一个类只有一个实例&#xff0c;并提供一个访问它的全局访问点。节省内存&#xff0c;节省创建对象的开销。 非单例模式 &#xff1a; class StrTools:passs1 StrTools() s2 StrTools() print(s1) print(s2) 单例模式 &#xff1a; # tr_t…

一文精通C++ -- 继承

前言&#xff1a;继承是C类和对象三大特性中关键的一环&#xff0c;上承封装&#xff0c;下接多态&#xff0c;C中的继承是一种面向对象编程的概念&#xff0c;它允许一个类&#xff08;称为子类或派生类&#xff09;继承另一个类&#xff08;称为父类或基类&#xff09;的属性…

vueDay04——v-if else show

一、v-if的使用 我们可以像c语言一样去使用v-if结构 比如单用v-if&#xff0c;连用v-if v-else&#xff0c;或者是v-if v-else-if v-else 注意&#xff1a; 1.v-if v-else-if需要绑定值,而v-else不需要绑定值 2.if结构可以用在不同的标签类型之间 <div v-if"fir…

一种晶圆表面形貌测量方法-无图晶圆几何量测系统

晶圆检测机&#xff0c;又称为半导体芯片自动化检测设备&#xff0c;是用于对半导体芯片的质量进行检验和测试的专用设备。它可以用于硅片、硅晶圆、LED芯片等半导体材料的表面检测&#xff0c;通过对晶圆的表面特征进行全面检测&#xff0c;可以有效降低产品的不良率&#xff…

【无标题】Linux VMware安装centos之后设置静态IP

查看本地IP&#xff1a;ip addr;修改启动协议BOOTPROTOstatic&#xff1b;手动配置IP地址&#xff1b;vi /etc/sysconfig/network-scripts/ifcfg-ens33在最下面增加如下配置 # IP地址 &#xff08;根据自己的环境修改&#xff09; IPADDR192.168.8.101 # 子网掩码 NETMASK255.…

Android 字符串工具类

Java基础大佬勿喷&#xff0c;小白专属&#xff01; public class StringUtils {// 判断字符串是否为空public static boolean isEmpty(String str) {return str null || str.trim().isEmpty();}// 判断字符串是否为非空public static boolean isNotEmpty(String str) {retur…

FLStudio21汉化破解激活版下载,Fl Studio 2024中文破解版激活补丁

最新版本FL Studio 21官方中文汉化激破解版是比利时Image-Line公司开发的DAW。在去年DTM站的DAW调查中&#xff0c;在世界上很受欢迎&#xff0c;特别是作为EDM制作工具被广泛使用。从1997年以FruityLoops的名字发行的时候开始&#xff0c;FL Studio 21就一直作为Windows专用的…