一.iterator

1.概念:iterator是一种接口机制,为各种不同的数据结构提供统一的访问机制。

2.作用:

  • 为各种数据结构,提供一个统一的、简便的访问接口;

  • 使得数据结构的成员能够按某种次序排列。

  • ES6创造了一种新的遍历命令for...of循环,Iterator接口主要供for...of消费。

3.工作原理:

  1. 创建一个指针对象,指向数据结构的起始位置。

  2. 第一次调用next方法,指针自动指向数据结构的第一个成员

  3. 接下来不断调用next方法,指针会一直往后移动,直到指向最后一个成员

  4. 每调用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的更多相关文章

  1. JS的ES6的Generator

    JS的ES6的Generator 1.Generator函数的概念: ES6提供的解决异步编程的方案之一,现在已经不怎么用了被淘汰了. Generator函数是一个状态机,内部封装了不同状态的数据. ...

  2. ES6的Iterator,jquery Fn

    ES6的Iterator对象详解 Iterator实现原理 创建一个指针对象,指向当前数据结构的起始位置.也就是说,遍历器对象本质上,就是一个指针对象. 第一次调用指针对象的next方法,可以将指针指 ...

  3. Atitit js es5 es6新特性 attilax总结

    Atitit js es5 es6新特性 attilax总结 1.1. JavaScript发展时间轴:1 1.2. 以下是ES6排名前十的最佳特性列表(排名不分先后):1 1.3. Es6 支持情况 ...

  4. 让 Node.js 支持 ES6 的语法

    为了让 Node.js 支持 ES6 的语法, 需要使用 Babel. 安装 es-checker 在使用 Babel 之前 , 我们先检测一下当前 node 对 es6 的支持情况. 在命令行下执行 ...

  5. JS的ES6的基础语法

    JS的ES6 1.let let age = 12; (1). 作用: 与var类似, 用于声明一个变量 (2). 特点: 在块作用域内有效 不能重复声明 不会预处理, 不存在提升 (3). 应用: ...

  6. 让Node.js支持ES6的语法

    使用命令,全局安装es-checker: cnpm install -g es-checker 安装好之后,执行以下命令来查看Node.js对ES6的支持情况. es-checker 可以从输出中查看 ...

  7. 用vue.js学习es6(六):Iterator和for...of循环

    一.Iterator (遍历器)的概念: 遍历器(Iterator)就是这样一种机制.它是一种接口,为各种不同的数据结构提供统一的访问机制.任何数据结构只 要部署Iterator接口,就可以完成遍历操 ...

  8. ES6的Iterator遍历器

    JS表示集合的对象主要有Array.Set.Object.Map,在以前,遍历它们需要使用2种不同的方法,而现在,JS提出了Iterator机制,可以给不同的数据结构提供统一的遍历方法,就是for…o ...

  9. JS语法-ES6

    1.介绍 ECMAScript 6简称ES6,是JavaScript语言的下一代标准. 2.常用属性及方法 2.1常量与变量的定义 在JavaScript中,我们一般使用var来定义变量,实际上它是有 ...

随机推荐

  1. 【mybatis】mybatis查询 结果 用map接收,无实体接收 + 关联子表 一并返回主子表的结果

    如果后台程序没有实体对应mysql的数据表. 而mybatis想要查询mysql这个数据表的数据,返回给应用程序. 应用程序该如何接收? =============================== ...

  2. WPF调用C++生成的dll文件(示例)

    注:笔者使用的VS版本为2019.1.打开VS2019,选择文件 -> 新建 -> 项目 2.选择项目 新建项目时选择C++“控制台应用”语言:C++平台:Windows项目类型:空项目 ...

  3. Tigase XMPP Server

    Tigase XMPP Server是我们的旗舰服务器端软件,提供XMPP服务或实例通信(IC)服务.最基本的解释是Tigase是一个聊天服务器,但它远不止于此.聊天是其可能的应用程序之一,但任何类型 ...

  4. [C++] 初始化 vs 赋值

  5. 8 Traits of an Experienced Programmer that every beginner programmer should know

    Referrence: http://whats-online.info/guides-and-info/36/Traits-of-Experienced-Programmer-that-every- ...

  6. Kafka Streams开发入门(2)

    背景 上一篇我们介绍了Kafka Streams中的消息转换操作map,今天我们给出另一个经典的转换操作filter的用法.依然是结合一个具体的实例展开介绍. 演示功能说明 本篇演示filter用法, ...

  7. ML-求解 SVM 的SMO 算法

    这算是我真正意义上认真去读的第一篇ML论文了, but, 我还是很多地方没有搞懂, 想想, 缓缓吧, 还是先熟练调用API 哈哈 原论文地址: https://www.microsoft.com/en ...

  8. Pandas 之 描述性统计案例

    认识 jupyter地址: https://nbviewer.jupyter.org/github/chenjieyouge/jupyter_share/blob/master/share/panda ...

  9. Pandas 之 DataFrame 常用操作

    import numpy as np import pandas as pd This section will walk you(引导你) through the fundamental(基本的) ...

  10. 爬虫之scrapy核心组件

    Scrapy一个开源和协作的框架,其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的,使用它可以以快速.简单.可扩展的方式从网站中提取所需的数据.但目前Scrapy的用途十分广泛,可用于如数据 ...