ES6 迭代器和生成器

设计为了更高效的数据处理,避免过多for循环嵌套(代码复杂度,跟踪多个循环变量)

1. 迭代器: 为迭代过程设计的接口

所有的迭代器对象都有next()方法,每次调用都返回一个结果对象,对象有两个属性

  一个是value, 表示下一个将要返回的值

  一个是done,Boolean类型,当没有更多可返回数据返回true

/* ES5迭代器实现
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
      }  
    }
  }
}
*/
// ES6 生成器实现
  function *createIterator(){
    yield 1;
    yield 2;
    yield 3;
  }
  var iterator = createIterator([1,2,3]);
  console.log(iterator.next());
  console.log(iterator.next());
  console.log(iterator.next());
  console.log(iterator.next());
 
yield 使用限制

只可在生成器内部使用,与return关键字一样,不能穿透函数边界

ES6 迭代器和生成器

内建迭代器(数组,Map集合,Set集合)

entries() 返回一个迭代器,其值为多个键值对

values() 返回一个迭代器,其值为集合的值

keys() 返回一个迭代器,其值为集合中所有的键名

ES6 迭代器和生成器

NodeList 迭代器 与 数组一致

上一篇:前端面试题整理(html)


下一篇:Android获取全局Context的方法