作用
可以在一个函数中定义多个返回值,通过next()依次获取返回值。
javascript">//定义生成器时,与普通函数的区别就是function后面的*
function* generation() {
yield "第一次调用";
yield "第二次调用";
return "最后一次调用";
}
let test = generation();
console.log(test.next().value);
console.log(test.next().value);
console.log(test.next().value);
遍历生成器的返回值
可以通过for of来遍历生成器的所有返回值,但注意:return的值无法获取到
javascript">for (const item of test) {
console.log(item);
}
解决方法1:
如果想获取到所有返回值,可以用循环来遍历
解决方法2:
将return改成yield
使用
set的遍历
es6新提出的Map和Set是没有对应的遍历方法的,我们可以通过生成器给其封装一个遍历方法。或者使用官方已经封装好的遍历方法keys、values、entries(这三种方法也可以通过生成器来制作)
但只能通过forof或者自己写循环遍历,forof是es6提出的。
javascript"> let list = [1, 2, 3, 1, 2, 3];
let listSet = new Set(list);
for (const item of listSet.keys()) {
console.log(item);
}
map的遍历
注意:new一个map对象初始化时,参数只能是二维数组
javascript"> let list = [[12,34],['a','b'],[true,'c']];
let listMap = new Map(list);
console.log(listMap);
for (const item of listMap.entries()) {
console.log(item);
}
这三种方法不止set和map可以用,其他的集合和数组也可以使用。