设计为了更高效的数据处理,避免过多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关键字一样,不能穿透函数边界
内建迭代器(数组,Map集合,Set集合)
entries() 返回一个迭代器,其值为多个键值对
values() 返回一个迭代器,其值为集合的值
keys() 返回一个迭代器,其值为集合中所有的键名
NodeList 迭代器 与 数组一致