Iterator接口(遍历器)和for/of循环

只要某个数据结构部署了Iterator接口,就可以使用拓展运算符将其转化为数组。

let arr = [...iterator];

var str = 'hello';
[...str]  //["h", "e", "l", "l", "o"]

yield* 后面跟的是一个可遍历的结构,它会调用该结构的遍历器接口。

let generator = function* (){
    yield 1;
    yield* [2,3,4];
    yield 5;
}
var it = generator();
it.next();  //{value: 1, done: false}
it.next()   //{value: 2, done: false}
it.next()   //{value: 3, done: false}
it.next()   //{value: 4, done: false}
it.next()   //{value: 5, done: false}
it.next()   //{value: undefined, done: true}

数组的遍历会调用遍历器接口,所以任何接受数组作为参数的场合,其实都调用了Iterator接口,如下:

for/of    Array.from()   Map()    Set()   WeakMap()   WeakSet()  Promise.all()  Promise.rece()

1,字符串的Iterator接口

var str = 'hi';
typeof str[Symbol.iterator]    //'function'

var a = str[Symbol.iterator]();
a.next()   //{value: "h", done: false}
a.next()   //{value: "i", done: false}

[...str]     //["h", "i"]

以前字符串转化为数组:str.split(""),ES6中可以使用Iterator进行遍历加入数组中,相当简洁。

 

猜你喜欢

转载自www.cnblogs.com/tangjiao/p/9046429.html