简化循环
- 生成器
// 生成器函数名称前带个* // 函数表达式let createIterator = function *(items){} function *createIterator() { yield 1; //yield关键字不能往深度嵌套只能存在于构造器中 yield 2; yield 3; } // 这边同样可以以参数循环方式去构造 // 生成器能像正规函数那样被调用,但会返回一个迭代器 let iterator = createIterator(); // next遍历 console.log(iterator.next().value); // 1 console.log(iterator.next().value); // 2 console.log(iterator.next().value); // 3
- 访问对象默认迭代器
let values = [1, 2, 3]; let iterator = values[Symbol.iterator](); // 然后就可以通过next方法来访问每一项
- for-of循环
这边主要是记录一下三种集合类型的用法:数组、Set、Map对象。
entries() :返回一个包含键值对的迭代器;
values() :返回一个包含集合中的值的迭代器;
keys() :返回一个包含集合中的键的迭代器。
数组对象键值为0起始,set对象键值就是value本身
如果我们不声明迭代器会采取默认迭代器输出。
for of循环Map对象可以采用解构,同样可以实现比较方便的let values = [1, 2, 3]; for (let num of values) { console.log(num); } // 迭代器在for of中用法 for (let each of values.entries()){ console.log(each); }
let data = new Map(); data.set("title", "Understanding ES6"); data.set("format", "ebook"); // 与使用 data.entries() 相同 for (let [key, value] of data) { console.log(key + "=" + value); }
- 字符串迭代器
for of循环去遍历字符串每一位,包括空格 - NodeList 的迭代器
NodeList为js获取DOM元素的集合,在es6中同样也可以使用for of去循环let divs = document.getElementsByTagName('div'); for (div of divs){ console.log(div.id); }
迭代器还有非常多的拓展功能继续深入了解可以看一下深入理解es6这本书