Iterator 和 for...of 循环
Iterator 和 for...of 循环
Iterator(遍历器)意义
为Array、Object、Map、Set四种数据集合,提供统一的接口机制来处理所有不同的数据结构 。
任何数据结构,只要部署 Iterator 接口,就可以完成遍历操作(即依次处理该数据结 构的所有成员) 。
接口
//遍历器接口
interface Iterable{[Symbol.iterator]():Iterator,
}
//指针对象
interface Iterator{next(value?:any):IterationResult,
}
//返回结果
interface IterationResult{value:any,done:boolean
}
生成器
Generator 函数的调用方法与普通函数一样,也是在函数名后面加上一对圆括号。不同 的是 ,
调用 Generator 函数后,该函数并不执行 , 返回的也不是函数运行结果 , 而是一个指 向内 部状态
的指针对象, 也就是上一章介绍的遍历器对象 Iterator Object ) 。
调用 Generator 函数返回一个遍历器对象,代表 Generator 函数的内部指针 。 以
后,每次调用遍历器对象的 next 方法,就会返回 一个有着 value 和 done 两个属性的对象 。
value 属性表示当前的内部状态的值,是 yield 语句后面那个表达式的值 : done 属性是一个
布尔值,表示是否遍历结束
作用
- 为各种数据结构提供一个统一 的、简便的访问接口;
- 使得 数据结构的成员能够按某种次序排列;
- ES6 创造了 一种新的遍历命令一for . . . of 循环, Iterator 接口 主要供 for ... of 消费。
过程
- 创建一个指针对象,指向当前数据结构的起始位置 。 也就是说,遍历器对象本质上就是 一个指针对象 。
- 第一次调用指针对象的 next 方法,可以将指针指向数据结构的第 一个成员 。
- 第二次调用指针对象的 next 方法,指针就指向数据结构的第二个成员 。
- 不断调用指针对象的 next 方法,直到它指向数据结构的结束位置 。
原理
每次调用 next 方法都会返回数据结构的当前成员的信息。具体来说,就是返回一个包含 value 和 done 两个属性的对象。其中, value 属性是当前成员的值, done 属性是一个布尔值
与其他遍历语法的比较
以数组为例, JavaScript 提供了多种遍历语法。最原始的写法就是 for 循环 。
//麻烦
for (var index = 0; index < myArray.length ; index++) { console.log(myArray[index]);
}
// 不能跳出
myArray.forEach(function (value) {console.log(value) ;
})//被设计用来遍历对象,而不是数组
for(let i in myArray){console.log(i)
}
//简洁,可跳出,统一接口
for(let i of myArray){console.log(i)
}//for ... of的等价写法
let iterator = myArray[Symbol.iterator]();
let item = iterator.next();
while(!item.done){console.log(item.value);item = iterator.next();
}
这种写法比较麻烦,因此数组提供了内置的 forEach 方法。
这种写法的问题在于,无法中途跳出 forEach 循环, break 命令或 return 命令都不能 奏效
for ... in循环可以遍历数组的键名。
for ... in 循环有几个缺点。
- 数组的键名是数字,但是 for ... in 循环是以字符串作为键名,“0”、“ 1 ”、" 2 ”等。
- for ... in 循环不仅可以遍历数字键名,还会遍历手动添加的其他键,甚至包括原 型链上的键。
- 某些情况下, for ... in 循环会以任意顺序遍历键名
总之, for . .. in 循环主要是为遍历对象而设计的,不适用于遍历数组。
for ... of 循环相比上面几种做法有一些显著的优点。
- 有着同 for ... in 一样的简洁语法,但是没有 for ... in 那些缺点。
- 不同于 forEach 方法 , 它可以与 break 、 continue 和 return 配合使用 。
- 提供了遍历所有数据结构的统一操作接口。
Iterator 和 for...of 循环相关推荐
- es6数组初始化_ES6 迭代器(Iterator)和 for...of循环使用方法
一.什么是迭代器? 生成器 概念在Java,Python等语言中都是具备的,ES6也添加到了JavaScript中.Iterator可以使我们 不需要初始化集合,以及索引的变量 ,而是使用迭代器对象的 ...
- Java学习之容器上(Collection接口常用方法,Iterator接口,使用foreach循环遍历Collection集合元素,Set集合通用知识(Hashset类,hashcode()与Lin
1.容器API的类图结构如下: JAVA的集合类是一种特别有用的工具类,它可以用于存储数量不等的多个对象,并可以实现常用数据结构,如栈,队列等,除此之外,JAVA集合还可用于保存具有映射关系的关联数组 ...
- ES6之路第十三篇:Iterator和for...of循环
Iterator(遍历器)的概念 JavaScript 原有的表示"集合"的数据结构,主要是数组(Array)和对象(Object),ES6 又添加了Map和Set.这样就有了四种 ...
- JavaSE Collections类 , Iterator迭代器 , 增强for循环
Collections 它是集合的工具类,为集合体系扩展了一些其他的方法.类中都是静态的方法,可以使用类名直接调用. 可变参数 在JDK1.5之后,如果我们定义一个方法需要接受多个参数,并且多个参数类 ...
- 【小白学Java】D20》》》Iterator迭代器 增强for循环
[友情链接]---–->Java中的各种集合大汇总,学习整理 [友情链接]----–> Collection集合 [友情链接]----–> ArrayList集合及其常用功能 [友情 ...
- ES6之Iterator和for...of循环
Iterator 遍历器是用来用一种统一的接口机制,来处理所有不同的数据结构.即for-of循环 已知的数据结构有四种,分别是数组,对象,Map,Set 数据结构只要部署了Iterator接口,就可以 ...
- Iterator迭代器与foreach循环
Iterator迭代器 1. Iterator介绍 在程序的开发中,经常需要遍历集合中所有的元素.针对这种需求,JDK专门提供了一个接口java.util.Iterator.Iterator接口也是j ...
- java list循环中删除元素的坑
背景 当我们要循环一个list中的元素,并且要删除某个元素的时候,一点要小心谨慎!其中深埋了好几个坑! 坑1 请看如下代码: /*** 测试删除集合中的空白元素*/ @Test public void ...
- async function_理解 Iterator, Generator 和 Async/Await
戳蓝字「前端技术优选」关注我们哦! 这里重点理解他们三者分别是什么,有什么区别,以及分别适用什么场景 Iterator Iterator是最简单最好理解的,在很久之前我写过一篇文章 循环的秘密 里面讨 ...
最新文章
- 探讨如何成为技术团队管理者
- junit 测试似有方法_Spring整合Junit的使用
- Shell程序设计 | 基本语法 :变量、I/O、算术运算、条件判断、流程控制、函数
- 404 Not Found: Requested route ('jerrylist.cfapps.eu10.hana.ondemand.com') does not exist
- 工业相机(3D)主要参数详述
- postgres 把一个表的值转成另一个表的字段名_用LUT来做一个可动态配置的卷积核...
- 20120530, BGP3
- 为什么程序员都不愿意升级 Java 8?
- 访问itunes store的时候提示网络连接超时的解决方案
- c语言快递信息系统有哪些信息,国内知名物流信息管理系统软件有哪些?分别是什么?...
- SpringBoot(尚硅谷)
- mxf转换工具(Aiseesoft MXF Converter) v9.2.36
- Spring Cloud 常用注解
- 学习计算机组装与维护的意义,学习计算机组装维护的目的与心得体会!
- 树形控件之思维导图 Android
- 安装使用TortoiseSVN + google code
- 我要多开梦幻手游PC端(梦幻手游PC端多开的简单分析及实现办法)
- 系统盘清理,便携小助手一键清理系统垃圾
- 字节跳动社招校招实习内推提前批
- wheelib: 一个为编程学习而生的C语言轮子库
热门文章
- metasploit终端命令大全 MSF
- Xcode搭建真机调试环境 图文实例
- C#结构体中数组的分配
- 计算机应用基础第二版在线作业c,计算机应用基础作业二(答案)
- 跟计算机断层扫描相关的技术,计算机断层扫描技术(简称PET)
- python横向合并merge_【Python代替Excel】7:merge、concat、append
- python字符串常用的方法_python字符串常用方法
- cnn池化层输入通道数_(pytorch-深度学习系列)CNN中的池化层-学习笔记
- 数据交换平台_从零开始理解大数据架构之数据交换平台
- php memcached windows,php memcached windows安装