迭代器
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] }
自己实现一个迭代器
新消息