迭代器
es6新增的特性,之前没有,其语法借鉴了Python、 Java、 C++。

实现了迭代器接口的类,都可以使用next方法来取元素。

比如:字符串、数组、映射、集合(Set、Map)、arguments 对象、NodeList 等 DOM 集合类型。




表现

const set = new Set();
set.add('共');
set.add('产');
set.add('党');

const setGen = set[Symbol.iterator](); // 取出迭代器:[Symbol.iterator]创建迭代器的工厂函数
const {done,value:fisrstEl} = setGen.next(); // 调用next取出第一个元素 
let hasNext = !done; // 判断有没有元素标识
hasNext &&  console.log(fisrstEl, hasNext);
while(hasNext){
    const {done, value} = setGen.next();
    hasNext = !done;
    hasNext && console.log(value, hasNext);
}

由上可以推断出:检查是否可以迭代 只需要判断是否存在默认迭代器属性的工厂函数[Symbol.iterator]即可知道

let num = 1;
let obj = {};
let str = 'abc';
// 这两种类型没有实现迭代器工厂函数
console.log(num[Symbol.iterator]); // undefined
console.log(obj[Symbol.iterator]); // undefined
// 这些类型都实现了迭代器工厂函数
console.log(str[Symbol.iterator]); // f values() { [native code] }

 

自己实现一个迭代器

新消息