ES6 Iterator笔记(摘抄至阮一峰的ECMAScript 6入门)

Iterator的遍历过程

创建一个指针对象,指向当前数据结构的起始位置。也就是说,遍历器对象本质上,就是一个指针对象。

第一次调用指针对象的next方法,可以将指针指向数据结构的第一个成员。

第二次调用指针对象的next方法,指针就指向数据结构的第二个成员。

不断调用指针对象的next方法,直到它指向数据结构的结束位置。

每一次调用next方法,都会返回数据结构的当前成员信息。具体来说,就是返回一个包含value和 done两个属性的对象。其中,value属性是当前成员的值,done属性是一个布尔值,表示遍历是否结束。

数据结构的默认Iterator接口

在ES6中,有些数据结构原生具备Iterator接口(比如数组),即不用任何处理,就可以被for...of循环遍历,有些就不行(比如对象)。原因在于,这些数据结构原生部署了Symbol.iterator属性,另外一些数据结构没有。凡是部署了Symbol.iterator属性的数据结构,就称为部署了遍历器接口。调用这个接口,就会返回一个遍历器对象。

Symbol.iterator属性本身是一个函数,就是当前数据结构默认的遍历器生成函数。执行这个函数,就会返回一个遍历器。

一个对象(Object)如果要有可被for...of循环调用的Iterator接口,就必须在Symobol.iterator的属性上部署遍历器生成方法(原型链上的对象具有该方法也可)。

class RangeIterator {

// 构造方法

constructor (start, stop) {

this.value = start

this.stop = stop

}

// 返回Symbol对象的iterator属性,这是一个预定好的、类型为Symbol的特殊值,所以要放在方括号内。

[Symbol.iterator] () {

return this

}

next () {

var value = this.value

if (value < this.stop) {

this.value++

return {

done: false,

value: value

}

}

return {

done: true,

value: undefined

}

}

}

function range (start, stop) {

return new RangeIterator(start, stop)

}

for (var value of range(0, 3)) {

console.log(value)

}

调用Iterator接口的场合

解析赋值

对数组和Set结构进行解构赋值时,会默认调用Symbol.iterator方法。

扩展运算符

扩展运算符(...)也会调用默认的iterator接口

只要某个数据结构部署了iterator接口,就可以对它使用扩展运算符,将其转为数组。

yield*

yield*后面跟的是一个可遍历的结构,它会调用该结构的遍历器接口。

其他场合

由于数组的遍历会调用遍历器接口,所以任何接收数组作为参数的场合,其实都调用了遍历器接口。

python 阮一峰_ES6 Iterator笔记(摘抄至阮一峰的ECMAScript 6入门)相关推荐

  1. 《傲慢与偏见》读书笔记摘抄

    (篇一) 天啊,幸亏我生在了现代! 若生在伊丽莎白和简的年代,命运完全不掌握在自己手中啊! 首先,你得出生在一个富贵之家,父母要有足够的产业和眼光来支持你的教育--那个时代,19世纪初时的社会(那时我 ...

  2. 阮一峰 《ECMAScript 6 入门》:let 和 const 命令

    以下内容全文出自 阮一峰的书: <ECMAScript 6 入门> 电子版地址:ES 6标准入门(第3版) let 命令 基本用法 ES6 新增了let命令,用来声明变量.它的用法类似于v ...

  3. 列举python的五个数据类型_python笔记--数据类型--列表

    本文为我学习python的笔记,因本人的编程技术才刚刚入门,所以笔记中可能会有一些错误,希望大家能友好的帮我指正出来 本文文字内容均为原创,请勿私自转载 图片来自互联网,侵删 列表(list) 定义, ...

  4. 《Python深度学习》第一章笔记

    <Python深度学习>第一章笔记 1.1人工智能.机器学习.深度学习 人工智能 机器学习 深度学习 深度学习的工作原理 1.2深度学习之前:机器学习简史 概率建模 早期神经网络 核方法 ...

  5. [网络安全学习篇10]:扫描技术、暴力破解工具(千峰网络安全视频笔记 10 day)

    引言:我的系列博客[网络安全学习篇]上线了,小编也是初次创作博客,经验不足:对千峰网络信息安全开源的视频公开课程的学习整理的笔记整理的也比较粗糙,其实看到目录有300多集的时候,讲道理,有点怂了,所以 ...

  6. Python基础教程-菜鸟教程学习笔记1

    Python基础教程-菜鸟教程学习笔记1 文章目录 Python基础教程-菜鸟教程学习笔记1 前言 Python 简介 1. 第一个Python程序 2. Python 中文编码 3. 基本语法 1) ...

  7. [网络安全学习篇2]:IP详解及简单的DOS命令(千峰网络安全视频笔记 2 day)

    引言:我的系列博客[网络安全学习篇]上线了,小编也是初次创作博客,经验不足:对千峰网络信息安全开源的视频公开课程的学习整理的笔记整理的也比较粗糙,其实看到目录有300多集的时候,讲道理,有点怂了,所以 ...

  8. 《Python数据处理》7.2.4笔记:寻找唯一键的源码修改——由于zip方法

    <Python数据处理>7.2.4笔记:寻找唯一键的源码修改--由于zip方法 一.原因:zip方法 二.修改后 一.原因:zip方法 参考<python中使用zip函数出现> ...

  9. [网络安全学习篇6]:WEB服务器和FTP服务器(千峰网络安全视频笔记 6 day)

    引言:我的系列博客[网络安全学习篇]上线了,小编也是初次创作博客,经验不足:对千峰网络信息安全开源的视频公开课程的学习整理的笔记整理的也比较粗糙,其实看到目录有300多集的时候,讲道理,有点怂了,所以 ...

  10. Python预测 数据分析与算法 学习笔记(特征工程、时间序列)

    微信公众号:数学建模与人工智能 GitHub - QInzhengk/Math-Model-and-Machine-Learning 第3章 探索规律 3.1 相关分析 相关关系是一种与函数关系相区别 ...

最新文章

  1. [转]Knockoutjs快速入门
  2. Android Studio 添加Assets目录
  3. 对于css的简化属性
  4. java生成自己定义的表ID
  5. static_const和reinterpret_cast
  6. Android开发 常用命令
  7. 《Visual Studio.NET Tips and Tricks》第一章的翻译
  8. 国内几大最让游戏建模师羡慕的企业,你想进去吗?
  9. 阿里影业宣布新战略:“新基础设施”赋能电影产业
  10. 安全界“圣经”DBIR 报告推翻了哪些“你以为的”数据泄漏情况?
  11. 动态生成WebService的客户端
  12. 济南北大青鸟2013春季百人就业工程计划
  13. 偷盗者问题。甲乙丙丁四个嫌疑犯,只有一个是偷盗者。在审讯中,四人都有可能说真话或假话
  14. html代码鼠的故事游戏,分享一个html+js实现打地鼠游戏的实例代码
  15. 100种网站推广方法全集
  16. X上面有一道横线,怎么打出来?
  17. win10计算机睡眠 隔几分钟就唤醒,Win10电脑睡眠时经常被自动唤醒如何解决
  18. Android实战开发Handler机制深度解析
  19. 如何轻松地打造一款免开发RGB 三路产品?
  20. 一款运行在Mac平台上的浏览器:Vivaldi浏览器 for Mac

热门文章

  1. ELDER-RAY (多头力度和空头力度)
  2. win10开发环境搭建之wsl2(Ubuntu)+Terminal+docker
  3. DDR功能点 ODT ZQ校准
  4. 网站添加Google翻译代码
  5. 第二章:计算机中的数据
  6. 出海推荐 (出海服务器盘点)
  7. @csrf_exempt 类的视图跨域
  8. Matlab微分方程求解
  9. 通信工程是计算机类还是电子信息类公考,通信工程属于电子信息类吗
  10. python增加一列数据_使用Python向DataFrame中指定位置添加一列或多列的方法