es6之Iterator
1.任何数据结构只要部署了Iterator接口(本质是一个指针对象),也就是部署了Symbol.iterator属性,便可以完成遍历操作;数组原生就具备Iterator接口,就可以用for...of遍历。由于Iterator只是把接口规格加到数据结构之上,所以,遍历器与它所遍历的那个数据结构,实际上是分开的。
2.Iterator遍历过程:
- 创建一个指针对象,指向当前数据结构的起始位置;
- 调用next方法,可以将指针指向数据结构的第一个成员,返回一个包含value和done属性的对象;
- 继续调用next方法,......以此类推,直到指向结束位置。
//mock iterator
function makeIterator(array) {
var nextIndex = 0;
return {
next: function() {
return nextIndex < array.length ?
{value: array[nextIndex++], done: false} :
{value: undefined, done: true};
}
};
} var arr = makeIterator([1, 2, 3]); arr.next(); //{value: 1, done: false}
arr.next(); //{value: 2, done: false}
arr.next(); //{value: 3, done: false}
arr.next(); //{value: undefined, done: true}
3.调用Iterator的场合(即会默认调用Symbol.iterator):
- 解构赋值
- 扩展运算符(...)
- yield*(后面跟一个可遍历的结构)
- 任何接收数组作为参数的场合(for...of等)
4.字符串也具有Iterator接口(typeof str[Symbol.iterator] === 'function')
5.Symbol.iterator可以用Generator函数实现,只要用yield命令给出每一步的返回值即可。
var obj = {};
obj[Symbol.iterator] = function* () {
yield 1;
yield 2;
}
[...obj] // [1, 2]
6.for...of适用于数组、Set、Map、类数组对象(arguments、nodelist)、Generator、字符串。
7.for...in 和 for...of
- 前者只能获取对象的键名,后者可以得到键值;
- 对于数组,前者可以返回数组上的所有属性,后者只能返回具有数字索引的属性;
let arr = ['a', 'b', 'c'];
arr.d = 'hello'; for (let i in arr) {
console.log(i); // '0', '1', '2', 'd'
} for (let i of arr) {
console.log(i); // 'a, 'b', 'c'
}
- 前者主要为遍历对象而设计;不适用与遍历数组;
- 后者不同于foreach,可与break、continue、return配合使用;提供了遍历所有数据结构的统一接口。
8.iterator对象除了next方法,还有return、throw,而return必须返回一个对象。
9.fibonacci
var fib = {
[Symbol.iterator](){
let pre=0,cur=1;
return {
next(){
[pre, cur] = [cur, pre+cur];
return {done: false,value: cur};
}
}
}
}
for(var i of fib){
if(i>100)
break;
console.log(i)
}
es6之Iterator的更多相关文章
- ES6的Iterator,jquery Fn
ES6的Iterator对象详解 Iterator实现原理 创建一个指针对象,指向当前数据结构的起始位置.也就是说,遍历器对象本质上,就是一个指针对象. 第一次调用指针对象的next方法,可以将指针指 ...
- ES6的Iterator遍历器
JS表示集合的对象主要有Array.Set.Object.Map,在以前,遍历它们需要使用2种不同的方法,而现在,JS提出了Iterator机制,可以给不同的数据结构提供统一的遍历方法,就是for…o ...
- es6之iterator,for...of
遍历器(Iterator)是一种统一的接口机制,来处理所有不同的数据结构. JavaScript 原有的表示“集合”的数据结构,主要是数组(Array)和对象(Object),ES6 又添加了Map和 ...
- JS的ES6的iterator
一.iterator 1.概念:iterator是一种接口机制,为各种不同的数据结构提供统一的访问机制. 2.作用: 为各种数据结构,提供一个统一的.简便的访问接口: 使得数据结构的成员能够按某种次序 ...
- 前端知识点回顾之重点篇——ES6的Iterator和Generator
Iterator 迭代器是一种接口.是一种机制. 为各种不同的数据结构提供统一的访问机制.任何数据结构只要部署 Iterator 接口,就可以完成遍历操作(即依次处理该数据结构的所有成员). Iter ...
- ES6的 Iterator 遍历器到底是什么?
这节课要讲的是ES6中的Iterator. for...of为啥不遍历Object对象 第十三节我们讲了简单又实用的for...of,我们可以使用它来遍历数组,字符串,Set和Map结构,但是有没有发 ...
- 切图崽的自我修养-[ES6] 迭代器Iterator浅析
Iterator 这真是毅种循环 Iterator不是array,也不是set,不是map, 它不是一个实体,而是一种访问机制,是一个用来访问某个对象的接口规范,为各种不同的数据结构提供统一的访问机制 ...
- Es6 Symbol.iterator
Symbol.iterator 为每一个对象定义了默认的迭代器.该迭代器可以被 for...of 循环结构使用. --描述 当需要迭代一个对象的时候(比如在 for...of 循环的开始时),它的 @ ...
- es6(14)--iterator for ...of循环
//iterator for ...of循环 { let arr=['hello','world']; let map=arr[Symbol.iterator](); console.log(map. ...
随机推荐
- R中seurat等问题学习
1.Seurat 转自:https://cloud.tencent.com/developer/article/1055892 # Initialize the Seurat object with ...
- PAT 1099 Build A Binary Search Tree[BST性质]
1099 Build A Binary Search Tree(30 分) A Binary Search Tree (BST) is recursively defined as a binary ...
- adb push ,adb pull和adb install的区别
1.用命令行把手机上的文件拷贝到电脑上 1 adb pull sdcard/1222073679.png 拷贝文件夹命令,如把log文件夹拷贝到电脑当前目录 1 adb pull sdcard/log ...
- 下载.iso类型的软件如何安装
法一:这种类型的文件为镜像文件,一般默认在虚拟光驱上运行.通常的做法为: 安装Daemon Tools 虚拟光驱,可以打开CUE.ISO.CCD等这些虚拟光驱的镜像文件,并且将文件虚拟到光盘上使用.运 ...
- PHPCMS 修改后台路径简便方法
之前在网上找了很多关于修改phpcms后台路径的修改方法,但是都太繁琐(个人感觉),终于找到了一个相对简单的修改方法,在这里和大家分享一下,希望互相学习. 第一步:在网站根目录创建一个文件夹,以后就要 ...
- 安装和使用php的mcrypt扩展
程序员们在编写代码程序时,除了要保证代码的高性能之外,还有一点是非常重要的,那就是程序的安全性保障.PHP除了自带的几种加密函数外,还有功能更全面的PHP加密扩展库和. 其中,Mcrypt扩展库可以实 ...
- JPush相关概念
JPush相关概念 连接极光服务器前提 在连接极光服务器之前需要先将APP进行注册,连接Server时需要用到下发的两个字段:AppKey:应用唯一标识.Master Secret:服务器秘钥,用于服 ...
- MongoDB操作库/表
假设你已经安装好了MongoDB 不使用权限启动 mongod --fork --bind_ip 0.0.0.0 --dbpath=/mydata/mongo/data --logpath=/myda ...
- HYSBZ - 2818 Gcd (莫比乌斯反演)
莫比乌斯反演的入门题,设 \(F(x): gcd(i,j)\%x=0\) 的对数,\(f(x): gcd(i,j)=x\)的对数. 易知\[F(p) = \lfloor \frac{n}{p} \rf ...
- 保持简单----纪念丹尼斯•里奇(Dennis Ritchie)
http://www.ruanyifeng.com/blog/2011/10/dennis_ritchie.html