迭代器在许多编程语言中被作为一种更易处理数据集合的方式被使用。在ECMAScript6中,JavaScript添加了迭代器,将其作为此语言的一个重要特征。当再加上新的方法和新的集合类型(比如集合与映射)时,迭代器对数据的高效处理变得更加重要。

什么是迭代器

迭代器不过是一个带有特定接口的对象。此接口由一个名为next()的返回一个结果对象的方法组成。该结果对象有两个属性,value,也就是next的值,还有done,一个布尔值,当没有更多的值要返回时就为true。迭代器保留了一个指向了值集合位置的内部指针,每次调用next(),返回下一个合适的值。

如果你在最后一个值被返回后调用next(),该方法返回的done是true,value包含了迭代器的返回值。返回值并不认为是数据集的一部分,而是相关数据的最终片段,或者如果不存在这样的数据就是undefined(这一概念在本章后面的生成器一节中会更加清晰)。

理解了这些,用ECMAScript5创建生成器就相当简单了,比如:

function createIterator(items) {

    var i = 0;

    return {
next: function() { var done = (i >= items.length);
var value = !done ? items[i++] : undefined; return {
done: done,
value: value
}; }
};
} var iterator = createIterator([1, 2, 3]); console.log(iterator.next()); // "{ value: 1, done: false }"
console.log(iterator.next()); // "{ value: 2, done: false }"
console.log(iterator.next()); // "{ value: 3, done: false }"
console.log(iterator.next()); // "{ value: undefined, done: true }" // for all further calls
console.log(iterator.next()); // "{ value: undefined, done: true }"

createIterator()函数在此例中返回了一个带有next()方法的对象。方法每次被调用时,items 数组中的下一个值会被作为value返回。当i为4时,items[i++]返回undefined且done为true,这满足了ECMAScript6中生成器特殊的最后一种情况。

ECMAScript6在许多地方利用了生成器,使数据集合更易处理。因此,有一个好的基本理解有助于你更好的从整体上理解这门语言。

生成器

//to be continue

生成器函数表达式

//to be continue

生成器对象方法

//to be continue

生成器类方法

//to be continue

可迭代对象和for-of

//to be continue

访问默认迭代器

//to be continue

创建可迭代对象

//to be continue

内置迭代器

//to be continue

集合迭代器

//to be continue

字符串迭代器

//to be continue

节点列表迭代器

//to be continue

高级功能

//to be continue

给迭代器传递参数

//to be continue

在迭代器中抛出错误

//to be continue

生成器返回语句

//to be continue

委托生成器

//to be continue

异步任务调度

//to be continue

总结

//to be continue

[译]Understanding ECMAScript6 迭代器与生成器(未完)的更多相关文章

  1. JavaScript中的迭代器和生成器[未排版]

    JavaScript中的迭代器 在软件开发领域,"迭代"的意思是按照顺序反复多次执行一段程序,通常会有明确的终止条件. ECMAScript 6规范新增了两个高级特性:迭代器和生成 ...

  2. [译]Understanding ECMAScript6 函数

    函数 函数是任何编程语言的重要组成部分,而自从JavaScript被引入以来,JavaScript的函数就未有太多改变.遗留下来的积压问题及微妙行为使我们很容易犯错误,或者需要更多的代码来实现一个非常 ...

  3. [译]Understanding ECMAScript6 对象

    对象 ECMAScript6将大量精力聚焦在提升对象的实用性性上.聚焦的意义在于JavaScript中几乎每一个值是由对象中的某种类型表示.此外,在一个普通的JavaScript程序中使用对象的数量持 ...

  4. [译]Understanding ECMAScript6 基本知识

    基本知识 ECMAScript 6在ECMAScript 5之上做了大量的改变.一些改变很大,比如添加新的类型或者语法,而其它的非常小,提供了语言之上的渐进改进.这个章节包含了那些渐进改进,它们可能不 ...

  5. 【python】迭代器与生成器到底是什么?看完你就知道

    迭代器跟生成器,与上篇文章讲的装饰器一样,都是属于我的一个老大难问题. 通常就是遇到的时候就去搜一下,结果在一大坨各种介绍博客中看了看,回头又忘记了. 你是不是也是这样呢? 俗话说:好记性不如烂笔头, ...

  6. [译]PEP 342--增强型生成器:协程

    PEP原文 : https://www.python.org/dev/peps/pep-0342/ PEP标题: Coroutines via Enhanced Generators PEP作者: G ...

  7. python学习笔记四 迭代器,生成器,装饰器(基础篇)

    迭代器 __iter__方法返回一个迭代器,它是具有__next__方法的对象.在调用__next__方法时,迭代器会返回它的下一个值,若__next__方法调用迭代器 没有值返回,就会引发一个Sto ...

  8. python基础教程总结8——特殊方法,属性,迭代器,生成器,八皇后问题

    1. 重写一般方法和特殊的构造方法 1.1 如果一个方法在B类的一个实例中被调用(或一个属性被访问),但在B类中没有找到该方法,那么会去它的超类A里面找. class A: ... def hello ...

  9. Day 12 :迭代器与生成器

    可迭代:在Python中如果一个对象有__iter__( )方法,则称这个对象是可迭代的(Iterable): 其中__iter__( )方法的作用是让对象可以用for ... in循环遍历,列表Li ...

随机推荐

  1. laravel基础课程---3、路由(Laravel中的常见路由有哪几种)

    laravel基础课程---3.路由(Laravel中的常见路由有哪几种) 一.总结 一句话总结: 6种:post,get,put,patch,delete,options Route::get($u ...

  2. 让Spinner中的文字居中

    如果套用simple_spinner_item或是simple_spinner_dropdown_item,然后直接在Spinner中用 android:gravity="center&qu ...

  3. .html 页面修改成 .jsp 后缀后中文乱码解决办法。

    .html 后缀的文件,如果直接将 .html后缀改成 .jsp 后缀,则会乱码. 正确方法如下: 将如图的代码中 html  声明去掉,然后加上这段代码:<%@ page language=& ...

  4. BZOJ_5418_[Noi2018]屠龙勇士_exgcd+excrt

    BZOJ_5418_[Noi2018]屠龙勇士_exgcd+excrt Description www.lydsy.com/JudgeOnline/upload/noi2018day2.pdf 每次用 ...

  5. Mysql源码学习——Thread Manager

    一.前言 上篇的Connection Manager中,曾提及对于一个新到来的Connection,服务器会创建一个新的线程来处理这个连接. 其实没那么简单,为了提高系统效率,减少频繁创建线程和中止线 ...

  6. maven构建java项目、web项目

    maven构建java项目.web项目 一.mvn构建web项目 1安装mvn(包括path) 2命令:mvn archetype:create -DgroupId=cn.edu.sdau.neat ...

  7. jQuery EasyUI API 中文文档 - Tree树使用介绍

    用 $.fn.tree.defaults 重写了 defaults. 依赖 draggable droppable 用法 Tree 能在 <ul> 元素里定义,此标记可以定义为叶节点和子节 ...

  8. PHP中正则表达式学习及应用(二)

    正则表达式中的“元字符” * 匹配前一个内容的0次1次或多次 例如: <?php $mode="/go*gle/"; //前一个内容指的是 * 的前一个字符 o ,在$str ...

  9. SQL——基础概念

    服务器登录名:指有权限登录到某服务器的用户:如sa 服务器角色:指一组固定的服务器用户,默认有9组: 登录名一定属于某些角色,默认为public 服务器角色不容许更改 登录后也不一定有权限操作数据库 ...

  10. beans.xml中的头部配置

    Spring配置文件beans.xml头部配置解释 关于在beans.xml要使用哪些功能,官网上已经提供了每个功能说明和标准的头文件信息,当我们在开发使用时要哪些功能,都可以上官网去定位. http ...