ES6初步了解迭代器

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

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

在这里插入图片描述

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

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

在这里插入图片描述

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

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

在这里插入图片描述

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

    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

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

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

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

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

    // 声明一个对象const obj = {name:"张三",age:18,schoolmate:["李四","王五","赵六"],// 添加方法[Symbol.iterator](){// 索引变量let index = 0// 存一个thislet _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.hqwc.cn/news/255044.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

明明的随机数

很明显&#xff0c;这个题是一个拼凑题&#xff0c;首先我们需要创建数组输入数据&#xff0c;数据中有重复的元素&#xff0c;我们把其中一个重复的元素重新赋值为0&#xff0c;这样数组中就除0之外没有多余的元素了&#xff0c;0不用管它&#xff0c;接着我们队数组进行升序排…

集合的大家族

常见面试题&#xff1a;ArrayList和LinkedList的区别 ArrayList是基于动态数组实现的&#xff0c;而LinkedList是基于链表实现的由于第1点因此ArrayList在查找和修改元素操作时效率更高&#xff0c;而在增删元素时LinkedList则效率更高&#xff0c;因为ArrayList需要移动数据

HXDSP2441-SPI(Serial Peripheral Interface)总线

SPI(Serial Peripheral Interface)总线 串行外设接口 (SPI) 是同步串行通信的事实上的标准&#xff08;有许多变体&#xff09;&#xff0c;主要用于嵌入式系统中集成电路之间的短距离有线通信。 SPI 使用主-子节点&#xff08;主/从&#xff09;架构&#xff0c;其中一个主设…

在 Windows 桌面的redis中远程连接到 VMware 中运行的 Linux 上的 Redis

先修改一下docker容器中的redis(一会连上之后看效果) 我使用的是VMware的虚拟机 选择的网络设置为桥接模式 查到虚拟机独立的ip是如下 允许 Linux 虚拟机上的 Redis 监听外部连接&#xff1a; 打开 Linux 虚拟机上的 Redis 配置文件。在大多数系统上&#xff0c;配置文件位于…

TikTok与互动广告:品牌如何打破传统界限

随着数字时代的蓬勃发展&#xff0c;广告行业也经历了翻天覆地的变革。在这个变革的浪潮中&#xff0c;TikTok作为一款崭新的社交媒体平台&#xff0c;通过其独特的短视频形式为品牌提供了全新的互动广告机会。 本文将深入探讨TikTok与互动广告的结合&#xff0c;以及品牌如何…

基于ssm助学贷款网站论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本助学贷款管理系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据信息…

CentOS系统下常见HTTP服务器故障排除

在CentOS系统上&#xff0c;HTTP服务器是用于托管和提供Web内容的关键组件。然而&#xff0c;由于各种原因&#xff0c;服务器可能会出现故障或问题。以下是在CentOS系统下常见HTTP服务器故障排除的步骤和建议&#xff1a; 服务器无法启动&#xff1a; 如果您的HTTP服务器无法…

【华为网络-配置-025】- 同 VLAN 下不同网段通信(启用 Sub 地址)

要求&#xff1a; 1、各接口配置 VLAN 后配置 Sub 地址使 PC1 与 PC3 通信。 一、sub 地址配置 [LSW1]vlan 10 [LSW1]port-group group-member GigabitEthernet 0/0/1 to GigabitEthernet 0/0/2 [LSW1-port-group]port link-type access [LSW1-port-group]port default vla…

速达软件任意文件上传漏洞复现

简介 速达软件专注中小企业管理软件,产品涵盖进销存软件,财务软件,ERP软件,CRM系统,项目管理软件,OA系统,仓库管理软件等,是中小企业管理市场的佼佼者,提供产品、技术、服务等信息,百万企业共同选择。速达软件全系产品存在任意文件上传漏洞,未经身份认证得攻击者可以通过此漏…

内衣洗衣机哪个牌子好用?家用小型洗衣机推荐

由于现在社会的工作压力越来越大&#xff0c;使得许多的上班族在白天已经精疲力尽&#xff0c;而下班后只想好好地躺平&#xff0c;但是每次洗澡的时候&#xff0c;一想到自己的内衣裤还要自己手洗&#xff0c;真是让人头疼。有的用户由于便利&#xff0c;会存上几天再一起扔到…

创新释放:Atlassian 人工智能引领现代工作

01 背景介绍 随着人工智能技术的蓬勃发展&#xff0c;越来越多企业开始关注将 AI 技术应用于业务。作为一家备受瞩目的协作软件工具提供商&#xff0c;Atlassian 积极探索并应用人工智能技术。 在人类历史上&#xff0c;团队一直是最伟大成就的核心。Atlassian 的使命在于释放…

超大规模集成电路设计----基于阵列的可编程逻辑(七)

本文仅供学习&#xff0c;不作任何商业用途&#xff0c;严禁转载。本篇文章绝大部分资料来自中国科学院段成华教授PPT 超大规模集成电路设计----基于阵列的可编程逻辑&#xff08;七&#xff09; 7.1 引言7.1.1.回顾7.1.2. 数字逻辑系列Digital Logic Families7.1.3.从定制到半…