iterator [ɪtə'reɪtə] 遍历器
lterator 遍历器
遍历器是一种接口,它为不同的数据结构提供了统一的访问机制。
如果一个数据结构具有遍历器接口,那么就可以依次处理该数据结构的成员。
当前 javascript 用来表示集合的数据结构有四种,分别为数组、对象、Set和Map,并且这四种数据结构可以相互嵌套使用,比如:数组的成员可以是对象,对象的成员又可以是Set等等。
一、遍历器接口
如果一个结构具有Symbol.lterator属性,那么就称这个数据结构具有遍历器接口。
Symbol.Iterator 返回Symbol对象的lterator属性,这是一个预定义好的、类型为Symbol的特殊值。
Symbol.Iterator 属性指向一个方法,调用此方法返回一个遍历器对象,它是一个指针对象,默认指向数据结构的起始位置。
let arr = ['百度网',4,'www.baidu.com','北京大学'] let it = arr[Symbol.iterator]() // 定义循环器 console.log(it.next())
console.log(it.next())
console.log(it.next())
//每一次调用next()方法都会返回一个对象,此对象包含 value 和 done 属性,value属性值是数据结构成员的值,如果遍历完成,value属性值为 undefined; done属性是一个布尔值,如果为 true,说明遍历完成,如果为false,说明遍历尚未完成。
function studyEs6() {
let arr = ['百度网',4,'www.baidu.com','北京大学']
let it = arr[Symbol.iterator]()
for(;;){ // 相当于一个while(true){} 循环,但是性能要快四倍
let elem = it.next()
if(elem.done){
break
}
console.log(elem.value)
}
}

二、默认具有遍历器接口的数据结构, for of 循环
当对一个数据结构使用for of 循环遍历的时候,会自动调用遍历器接口。
ES6中有四类数据结构默认具有遍历器接口:
(1) 数组
例如:
let arr = [1,2,3,'aa','bb','cc']
for (let elem of arr) {
console.log(elem)
}
(2) 某些类数组
例如:
let obj = {
data:['aa','bb','cc',3,9,8],
[Symbol.iterator]() {
const self = this
let index = 0
return {
next() {
if(index < self.data.length){
return {
value.self.data[index++]
done: false
}
}else{
return (value:undefined,done:true)
}
}
}
}
}
let it = obj[Symbol.iterator]()
console.log(it.next().value)
(3) Map
(4) Set
三、展开运算符
如果一个数据结构具有遍历器接口,那么除了可以使用for of 循环以外,也可以使用展开运算符。
代码实例如下:
let arr = ['百度网',4,'www.baidu.com'] console.log(...arr)
.
iterator [ɪtə'reɪtə] 遍历器的更多相关文章
- ES6学习笔记(十三)Iterator遍历器和for...of循环
1.概念 遍历器(Iterator)就是这样一种机制.它是一种接口,为各种不同的数据结构提供统一的访问机制.任何数据结构只要部署 Iterator 接口,就可以完成遍历操作(即依次处理该数据结构的所有 ...
- Iterator(遍历器) 和 for...of 循环
是generator的前置知识 generator :https://www.cnblogs.com/wangtong111/p/11322961.html 遍历器(Iterator)就是这样一种机制 ...
- Iterator遍历器 调用Symbol.Iterator属性,遍历器对象。
Iterator实现原理 创建一个指针对象,指向当前数据结构的起始位置.也就是说,遍历器对象本质上,就是一个指针对象. 第一次调用指针对象的next方法,可以将指针指向数据结构的第一个成员. 第二次调 ...
- Iterator、for..of,for...in和自定义遍历器**
Iterator.for..of,for...in和自定义遍历器 Iterator: var arr = [1,2,3,4,5]; var ite = arr[Symbol.iterator](); ...
- ES6的Iterator遍历器
JS表示集合的对象主要有Array.Set.Object.Map,在以前,遍历它们需要使用2种不同的方法,而现在,JS提出了Iterator机制,可以给不同的数据结构提供统一的遍历方法,就是for…o ...
- Java SE之For增强与Iterator遍历器提取数据(附Map.Entry)
增强for循环: 1.操作数组 2.操作List集合 3.操作Map集合 1.map.values()法 2.map.keySet()法 [传统方法] 3.Map.Entry法 ...
- C++泛型编程(1)--自己实现C++迭代器/遍历器 iterator
1.原理 迭代器又称为遍历器,用于访问容器中的数据,迭代器旨在算法和容器之间搭建访问的桥梁,从而使算法和数据分离,不用关心数据具体的存储细节.具体的原理描述请参考以下两个博客: [1].C++迭代器 ...
- Iterator 遍历器
1.遍历器(Iterator)是一种接口,为各种不同的数据结构提供统一的访问机制.任何数据结构只要部署Iterator接口,就可以完成遍历操作(即依次处理该数据结构的所有成员). 2.Iterator ...
- 【前端】【javascript】es6中的遍历器接口Iterator
好久没发文章啦-.-为了证明我还活着,我决定从笔记里面抓一篇还算不乱比较像文章的发出来... 这些笔记是我在学es6的时候断断续续记录的,最近会一份一份整理陆陆续续发出来,顺便也自己再看一遍.我学习e ...
随机推荐
- python3-开发进阶Flask的基础(5)
内容概要: SQLAlchemy flsak-sqlalchemy flask-script flask-migrate Flask的目录结构 一.SQLAlchemy 1.概述 SQLAlchemy ...
- AFNetworking3.0 Post JSON数据
使用AFNetworking3.0后网络请求由原来的AFHTTPRequestOperationManager变为AFHTTPSessionManager.一般的Post请求变成了这样: NSMuta ...
- textbox约束输入值问题解答
网上很多关于文本框只能输入数字的,今天又找了一遍,发现以前的写法居然有点问题! onkeypress="if (event.keyCode<48 || event.keyCode> ...
- iScroll4插件的使用实例
iScroll是Matteo Spinelli开发的一个滚动插件,使用原生js编写,其不依赖与任何js框架.iScroll 4 完全重写了iScroll这个框架的原始代码.旨在解决移动webkit系浏 ...
- HDU 4498 Function Curve (分段,算曲线积分)
Function Curve Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)To ...
- BZOJ 1032 JSOI 2007 祖码Zuma 区间DP
题目大意:依照祖玛的玩法(任意选颜色),给出一段区间.问最少用多少个球可以把全部颜色块都消除. 思路:把输入数据依照连续的块处理.保存成颜色和数量.然后用这个来DP.我们知道,一个单独的块须要两个同样 ...
- DTCC:MySQl核心代码开发经验揭示
http://tech.it168.com/a2012/0413/1337/000001337236.shtml
- security with restful
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...
- pm2-web
A web based monitor for PM2. Multiple hosts With the release of 0.11 pm2 no longer uses TCP sockets ...
- Java:volatile 关键字的一点理解
背景 学了六年C#,一直没有使用过 volatile,对多线程编程也是偶尔才会使用,这次学习 Java 又遇到了 volatile,准备稍微深入的了解一下. volatile 的作用? 几乎所有支持这 ...