• (六) ES6 新特性 —— 迭代器(iterator)


    CSDN话题挑战赛第2期
    参赛话题:学习笔记

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

     1. ES6 创造了一种新的遍历命令 for...of 循环,Iterator 接口主要供 for...of 消费

     2. 原生具备 iterator 接口的数据(可用 for of 遍历 )

    • Array
    • Arguments
    • Set
    •  Map
    • String
    • TypedArray
    • NodeList

     3. 工作原理

    a) 创建一个指针对象,指向当前数据结构的起始位置

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

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

    d) 每调用 next 方法返回一个包含 value 和 done 属性的对象

    注: 需要自定义遍历数据的时候,要想到迭代器。

    iterator的使用:

    声明一个数组

    const xiyou = ['唐僧', '孙悟空', '猪八戒', '沙僧'];'
    运行

    如果我们想遍历它,可以使用 for...of 的方式

    1. for(let v of xiyou){
    2. console.log(v);
    3. }

    ✨for...of 与 for...in的区别

    for...in是为遍历对象属性而构建的,它以任意顺序遍历一个对象的除Symbol以外的可枚举属性

    在JavaScript中,数组也是对象的一种,所以数组也是可以使用for...in遍历

    for...of语句在可迭代对象上创建一个迭代循环,调用自定义迭代钩子,并为每个不同属性的值执行语句(包括Array,Map,Set,String,TypedArray,arguments等等,不包括Object)

    for...in 例子:

    1. let obj = {
    2. name: 'aa',
    3. age: 18
    4. }
    '
    运行

    对于遍历,我们还有另一种方式:使用迭代器

    1. 创建一个指针对象,谁来创建?——>Symbol

    1. let iterator = xiyou[Symbol.iterator]();
    2. console.log(iterator);

    得到的是一个迭代器对象,里面含有next方法。

    2. 调用对象的next方法

    1. console.log(iterator.next());
    2. console.log(iterator.next());
    3. console.log(iterator.next());
    4. console.log(iterator.next());
    5. console.log(iterator.next());

    我们可以发现: 

    👉前四次调用iterator.next()都会一个返回数组中的元素value和一个done:false

    👉 最后一次因为数组中没有元素了所以返回undefined以及一个done为真表示遍历已经完成了。

    迭代器自定义遍历对象

    当我们想要自定义遍历数组时,可以使用迭代器

    假如我们想要拿到一个对象里面某个数组的数据:

    直接遍历对象明显是拿不到的,因为里面没有可用的iterator接口。所以我们可以在对象里面添加一个iterator方法:

    这样就可以很轻松的拿到对象里的数组元素了。

  • 相关阅读:
    RV1126笔记四十一:RV1126移植LIVE555
    组件安全漏洞
    进程管理(二)
    numpy.isclose
    Redis持久化RDB,AOF
    许可分析 license分析 第十七章
    Git分布式版本控制系统——git学习准备工作
    源码解析SpringMVC处理请求的完整流程
    ReaLTaiizor开源.NET winform控件库学习使用
    Linux之LNMP离线安装
  • 原文地址:https://blog.csdn.net/a45667/article/details/127089292