JS的ES6的iterator
一.iterator
1.概念:iterator是一种接口机制,为各种不同的数据结构提供统一的访问机制。
2.作用:
为各种数据结构,提供一个统一的、简便的访问接口;
使得数据结构的成员能够按某种次序排列。
ES6创造了一种新的遍历命令for...of循环,Iterator接口主要供for...of消费。
3.工作原理:
创建一个指针对象,指向数据结构的起始位置。
第一次调用next方法,指针自动指向数据结构的第一个成员
接下来不断调用next方法,指针会一直往后移动,直到指向最后一个成员
每调用next方法返回的是一个包含value和done的对象,{value: 当前成员的值,done: 布尔值}
value表示当前成员的值,done对应的布尔值表示当前的数据的结构是否遍历结束。
当遍历结束的时候返回的value值是undefined,done值为false
4.原生具备iterator接口的数据(可用for of遍历)
Array
arguments
set容器
map容器
String
......
let arr = [1,2,3]; for (let i of arr) {
console.log(i); } let obj = {
name: 'obj1'
} console.log(arr); //array拥有了iterator接口
console.log(...arr); //三点运算符用的也是iterator接口
console.log(obj); for (let i of obj) {
console.log(i); //object对象没有iterator接口 }
5.模拟实现iterator接口
//模拟实现iterator接口
function iteratorUtil(target) {
let index = ; //用来表示指针其实位置
return { //返回指针对象
next() { //指针对象的next方法
return index < target.length ? {
value: target[index++],
done: false
} : {
value: target[index++],
done: true
};
}
}
} //生成一个迭代器对象
let arr = [,,];
let iteratorObj = iteratorUtil(arr);
console.log(iteratorObj.next().value);
console.log(iteratorObj.next().value);
console.log(iteratorObj.next().value);
console.log(iteratorObj.next().value);
6.实现Object对象的遍历
let arr = [1,2,3,4]; var obj = {name: 'kobe', age: 40};
// console.log(obj[Symbol.iterator]); // undefined
// console.log(arr[Symbol.iterator]); // function function mockIterator() { let that = this; let index = 0;
let length = 0;
debugger
if(that instanceof Array){
length = that.length;
return {
next: function () {
return index < length ?{value: that[index++], done: false}: {value: that[index++], done: true}
}
}
}else {
length = Object.keys(that).length
let keys = Object.keys(that);
return {
next: function () {
return index < length ?{value: that[keys[index++]], done: false}: {value: that[keys[index++]], done: true}
}
}
} } Array.prototype[Symbol.iterator] = mockIterator;
Object.prototype[Symbol.iterator] = mockIterator; for(let i of arr){
console.log(i);
}
for(let i of obj){
console.log(i);
}
JS的ES6的iterator的更多相关文章
- JS的ES6的Generator
JS的ES6的Generator 1.Generator函数的概念: ES6提供的解决异步编程的方案之一,现在已经不怎么用了被淘汰了. Generator函数是一个状态机,内部封装了不同状态的数据. ...
- ES6的Iterator,jquery Fn
ES6的Iterator对象详解 Iterator实现原理 创建一个指针对象,指向当前数据结构的起始位置.也就是说,遍历器对象本质上,就是一个指针对象. 第一次调用指针对象的next方法,可以将指针指 ...
- Atitit js es5 es6新特性 attilax总结
Atitit js es5 es6新特性 attilax总结 1.1. JavaScript发展时间轴:1 1.2. 以下是ES6排名前十的最佳特性列表(排名不分先后):1 1.3. Es6 支持情况 ...
- 让 Node.js 支持 ES6 的语法
为了让 Node.js 支持 ES6 的语法, 需要使用 Babel. 安装 es-checker 在使用 Babel 之前 , 我们先检测一下当前 node 对 es6 的支持情况. 在命令行下执行 ...
- JS的ES6的基础语法
JS的ES6 1.let let age = 12; (1). 作用: 与var类似, 用于声明一个变量 (2). 特点: 在块作用域内有效 不能重复声明 不会预处理, 不存在提升 (3). 应用: ...
- 让Node.js支持ES6的语法
使用命令,全局安装es-checker: cnpm install -g es-checker 安装好之后,执行以下命令来查看Node.js对ES6的支持情况. es-checker 可以从输出中查看 ...
- 用vue.js学习es6(六):Iterator和for...of循环
一.Iterator (遍历器)的概念: 遍历器(Iterator)就是这样一种机制.它是一种接口,为各种不同的数据结构提供统一的访问机制.任何数据结构只 要部署Iterator接口,就可以完成遍历操 ...
- ES6的Iterator遍历器
JS表示集合的对象主要有Array.Set.Object.Map,在以前,遍历它们需要使用2种不同的方法,而现在,JS提出了Iterator机制,可以给不同的数据结构提供统一的遍历方法,就是for…o ...
- JS语法-ES6
1.介绍 ECMAScript 6简称ES6,是JavaScript语言的下一代标准. 2.常用属性及方法 2.1常量与变量的定义 在JavaScript中,我们一般使用var来定义变量,实际上它是有 ...
随机推荐
- Python列表(list)所有元素的同一操作
针对很普遍的每个元素的操作会遍历每个元素进行操作. 这里给出了几种写法,列表每个元素自增等数学操作同理: 示例:整形列表ilist加1个数.元素类型转字符串: ilist = [1, 2, 3, 10 ...
- SQL server中常用sql语句
--循环执行插入10000条数据 declare @ID intbeginset @ID=1 while @ID<=10000begininsert into table_name values ...
- 端口排查步骤-7680端口分析-Dosvc服务
出现大量7680端口的内网连接,百度未找到端口信息,需证明为系统服务,否则为蠕虫 1. 确认端口对应进程PID netstat -ano 7680端口对应pid:6128 2. 查找pid对应进程 t ...
- Angular复习笔记7-路由(下)
Angular复习笔记7-路由(下) 这是angular路由的第二篇,也是最后一篇.继续上一章的内容 路由跳转 Web应用中的页面跳转,指的是应用响应某个事件,从一个页面跳转到另一个页面的行为.对于使 ...
- CMU-Multimodal SDK Version 1.1 (mmsdk)使用方法总结
年10月26日 星期六 mmdatasdk: module for downloading and procesing multimodal datasets using computational ...
- cmd脚本
管道命令 | |命令的作用,就是让前一命令的输出当做后一命令的输入. > >会清除掉原有文件中的内容后把新的内容写入原文件: echo @echo off > a.bat. > ...
- VC 在桌面上绘制一些图形
注意:这是在桌面上绘制图形.如果想在VC++ MFC工程的视窗口上绘制图形.可以这么来,在工程View类的一个菜单响应(或者鼠标单击等事件的的响应)函数中添加下面main 中的代码,只需要将“红色字体 ...
- windows 下安装 node 以及安装 git 指令使用
一.先百度搜索 node 找 Download | Node.js 二.下载 Node 根据你自己的操作系统下载 三.安装 node (注意:如果安装失败,使用管理员身份打开安装) 四.安装成功之后 ...
- 为什么共进电子会选择APS系统?(APS应用案例)
企业介绍 深圳市共进电子股份有限公司(下文简称,共进电子)自1998年创始,以 “发展企业,培养人才,回馈社会”为宗旨,拥有“T&W”商标.2015年2月登陆上交所A股市场,证券代码为6031 ...
- Android-----创建SQLite数据库
简单介绍一下Android系统内置轻便又功能强大的嵌入式数据库--SQLite. SQLite是D.Richard Hipp用C语言编写的开源嵌入式数据库引擎,它是一款轻型的数据库,是遵守ACID的关 ...