迭代器在许多编程语言中被作为一种更易处理数据集合的方式被使用。在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

最新文章

  1. .NET中STAThread和MTAThread
  2. 初识SSH框架
  3. CRM SQL 创建活动 ActivityPointer
  4. [ CodeVS冲杯之路 ] P1171
  5. 了解常见的浏览器内核 Trident,Geckos,Presto,Webkit
  6. 点滴的积累---J2SE学习小结
  7. java中的反射,invoke方法[转]
  8. flask安装首页显示
  9. Dom编程(二)
  10. 实验测试之------创建DBlink,查询远端的yang用户下的abcdedfa表,创建同义词
  11. 排查Full GC
  12. 泛型与object
  13. Jquery回到顶部功能
  14. IOS HTTP访问端口
  15. malloc/free 与 new/delete 区别
  16. 五、Django之路由系统
  17. Struts2实现登录流程
  18. StarUML 破解方法
  19. Kali 中文家目录改英文目录
  20. js中的自定义异常处理函数

热门文章

  1. .PHP生成静态html文件的方法
  2. codeforces 463B Caisa and Pylons 解题报告
  3. 渲染树render tree
  4. hdu-5762 Teacher Bo(抽屉原理+暴力)
  5. Opencv— — water wave
  6. HDU5919 Sequence2
  7. 查看mysql连接情况,以及连接超时时间设置
  8. Azure Key Vault (2) 使用Azure Portal创建和查看Azure Key Vault
  9. Winform中ComBox大小设置
  10. CSS:CSS 选择器参考手册