es6笔记(6) Iterator 和 for...of循环
概要
js中的数组、对象,加上ES6中增加的Map、Set四种数据集合。 Iterator提供了一种机制,为各种不同的数据结构提供统一的访问机制。任何数据结构只要部署Iterator接口,就可以完成遍历操作。(依次操作)
作用:
- 为各种数据结构提供了统一的,简便的访问接口。
- 使得数据结构的成员能够按照某种顺序排列。
- ES6中增加了遍历命令 for...of循环,Iterator接口主要供for...of消费
原理
- 创建一个指针对象,指向当前数据结构的起始位置。 遍历器对象本质上是一个指针。
- 第一次调用next方法,返回数据结构的第一个对象。
第二次调用next方法,返回数据结构的第二个对象。依次向下。- 不断调用next方法,直到它指向数据结构的结束位置。 每次执行next方法,都会返回一个具有value和done属性的对象。value是当前成员的值,done是一个表示是否结束循环的布尔值。
手写Iterator接口
function iterator(arr){
let index = 0;
return {
next:function(){
return index < arr.length ?
{value:arr[index++], done:false}:
{value:undefined, done:true};
}
}
}
let arr = [1,2,3];
let it = iterator(arr);
使用
凡是具有Symbol.iterator属性的数据结构都具有 Iterator接口
let arr = [1,2,3];
let set = new Set(['1','2']);
let map = new Map([['a':1],['b':2]]);
//Array Iterator {}
console.log( arr[Symbol.iterator]() );
//SetIterator {'1','2'}
console.log( set[Symbol.iterator]() );
//MapIterator {["a",1],["b",2]}
console.log( map[Symbol.iterator]() );
//Object{value:1 , done:false }
arr[Symbol.iterator]().next();
for...of循环
数据
let arr = [1,2,3];
/*
* output: 1
* 2
* 3
*/
for (let i of arr){
console.log(i);
}
Map
let m = new Map();
m.set('a',1);
m.set('b',2);
for(let [key,value] of m){
console.log(key,value);
}
es6笔记(6) Iterator 和 for...of循环的更多相关文章
- es6 语法 (iterator和for...of循环)
Iterator遍历器 遍历器(Iterator)就是这样一种机制.它是一种接口,为各种不同的数据结构提供统一的访问机制.任何数据结构只要部署Iterator接口,就可以完成遍历操作(即依次处理该数据 ...
- ES6学习之Iterator和For...of循环
一.Iterator(它是一种接口,为各种不同的数据结构提供统一的访问机制.Iterator 接口主要供for...of消费) 默认Iterator接口(默认的 Iterator 接口部署在数据结构的 ...
- ES6笔记(6)-- Set、Map结构和Iterator迭代器
系列文章 -- ES6笔记系列 搞ES6的人也是够无聊,把JS弄得越来越像Java.C++,连Iterator迭代器.Set集合.Map结构都出来了,不知道说什么好... 一.简单使用 1. iter ...
- ES6 之 Set数据结构和Map数据结构 Iterator和for...of循环
ECMAScript 6 入门 Set数据结构 基本用法 ES6提供了新的数据结构Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. Set本身是一个构造函数,用来生成Set数据结构. va ...
- ES6的新特性(14)——Iterator 和 for...of 循环
Iterator 和 for...of 循环 Iterator(遍历器)的概念 JavaScript 原有的表示“集合”的数据结构,主要是数组(Array)和对象(Object),ES6 又添加了Ma ...
- ES6(Iterator 和 for...of 循环)
Iterator 和 for...of 循环 1.什么是 Iterator 接口 Iterator 接口功能:用一种相同办法的接口让不同的数据结构得到统一的读取命令的方式 2.Iterator的基本用 ...
- ES6笔记(5)-- Generator生成器函数
系列文章 -- ES6笔记系列 接触过Ajax请求的会遇到过异步调用的问题,为了保证调用顺序的正确性,一般我们会在回调函数中调用,也有用到一些新的解决方案如Promise相关的技术. 在异步编程中,还 ...
- 14 Iterator和for...of循环
Iterator和for...of循环 首先 Iterator 是一个接口. 标准是 function makeIterator(array) { var nextIndex = 0; return ...
- ES6笔记系列
ES6,即ECMAScript 6.0,ES6的第一个版本是在2015年发布的,所以又称作ECMAScript 2015 如今距ES6发布已经一年多的时间,这时候才去学,作为一个JSer,羞愧羞愧,还 ...
随机推荐
- 华为云Istio服务网格,让应用治理智能化、可视化
- PAT甲题题解-1003. Emergency (25)-最短路径+路径数目
给出n个城市,m条边,起始点c1和目的点c2接下来给出n个城市的队伍数以及m条双向边问你求c1到c2的所有最短路径数目,以及其中经过的最多队伍数 先最短路dijkstra,同时建立vector数组pr ...
- Notes of Daily Scrum Meeting(12.18)
前期落下的进度我们会在周六周日赶一下,在编译课程设计中期测试之后集中处理项目中的问题. 今天的任务总结如下: 团队成员 今日团队工作 陈少杰 调试后端连接的部分,寻找bug 王迪 测试搜索功能,修改b ...
- 5月29,48h,Geekathon,创业极客的梦想起点
http://mp.weixin.qq.com/s?__biz=MjM5ODQ3MDIwMg==&mid=213768178&idx=1&sn=0a607fac483f3eab ...
- Alpha 冲刺二
团队成员 051601135 岳冠宇 051604103 陈思孝 031602629 刘意晗 031602248 郑智文 031602234 王淇 会议照片 项目燃尽图 项目进展 暂无进展, 项目描述 ...
- Linux下搭建testlink1.9.17
如果只是要搭建testlink服务的话,建议使用testlink的集成安装包,能避免很多坑 下载地址:https://bitnami.com/stack/testlink/installer 下载好后 ...
- 八大排序算法的python实现
# -*- coding: utf-8 -*- # 冒泡排序 def bubble_sort(nums): i = 1 exchanged = True while i < len(nums) ...
- js用currentStyle和getComputedStyle获取css样式(非行间) 兼容ie与火狐
用js的style属性可以获得html标签的样式,但是不能获取非行间样式.那么怎么用js获取css的非行间样式呢?在IE下可以用currentStyle,而在火狐下面我们需要用到getComputed ...
- [转帖] Linux 下面栈空间大小的实验
比如局部变量是保存在栈空间中的,今天突然在想栈的上限是多大呢,什么时候才会栈溢出? ulimit 命令 linux下使用ulimit 命令可以查看系统的很多上限值. ulimit -a 查看所有 ul ...
- Java之序列化和反序列化
序列化的对象: package test_demo.SerializableOper; import java.io.Serializable; /* * 序列化对象需要实现序列号接口 * */ pu ...