赞
踩
迭代器是es6新增的特性
主要包含两个概念:迭代器和被迭代对象
被迭代对象必须包含一个键为Symbol.iterator的属性,此属性返回一个迭代器。
所有es6之后可以通过Symbol.iterator的返回值是否为undefined判断一个对象是否可迭代。
用来迭代一个对象的对象。
必须包含一个next函数,此函数返回一个对象.
{done:false, value: ''}
迭代器可包含一个名为return的函数,用于结束迭代,比如for循环迭代对象时通过break结束迭代就会调用此函数
被迭代对象可创建多个迭代器,每个迭代器的迭代过程相互独立,互不影响。
class Foo { constructor(max) { this.max = max } // 迭代器工厂 [Symbol.iterator](){ let c = 1, count = this.max // 返回一个迭代器对象 return { //迭代函数 next(){ if (c <= count) { return {done:false, value: c ++} }else { return {done:true} } }, [Symbol.iterator](){ return this }, return() { console.log('end') return {done: true} } } } } let foo = new Foo(10) for (const v of foo) { if (v > 5) { break } console.log(v); }
输出结果
1
2
3
4
5
end
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。