为什么要使用迭代器?
起初我们在遍历数组的时候是使用for(let i =0; i<array.length;i++)
,但是随着语言不断发展,现有的集合(数组,对象)不够用,于是有了新的集合 set,map 既然是集合 我们使用者,经常就会遍历它 .
只要将我们迭代器属性放在集合对象上就可以使用for of ,展开运算符,解构赋值等等一系列操作
,当然我们迭代器需要遵循一定的规则:1.起始点2.next方法3.调用next方法的时候返回值的格式{value:‘’,done:boolean}
自定义迭代器
//原本对象中是不存在迭代器属性的,但是只要按照迭代器标准 配置上,就可以使用for of ,展开运算符 ,等等操作
let person = {
from: 2,
to: 5,
[Symbol.iterator]() {
return {
start : this.from,
end :this.to,
next() {
if (this.start <this.end+1) {
let result;
result = {
value: this.start,
done: false
}
this.start++;
return result;
} else {
return {
value: undefined,
done: true
}
}
}
}
}
}
// [2,3,4,5]
[...person]
//
for(let item of person){
console.log(item)
}
内置迭代器
String、Array、TypedArray、Map 和 Set 都是内置可迭代对象,因为它们的原型对象都拥有一个 Symbol.iterator 方法。
Array.prototype[System.iterator]
显示调用迭代器
let str = '永不言弃!'
let iterator = str[Symbol.iterator]()
while(true){
let result = iterator.next();
if(result.done) break;
alert(result.value)
}