什么是遍歷器
- 接口,為各種數(shù)據(jù)結構提供統(tǒng)一訪問機制
- 默認具有遍歷器的數(shù)據(jù)結構:數(shù)組,Map,Set把曼,Generator函數(shù)
- 訪問方式:for...of
- 一種數(shù)據(jù)結構,只要定義了Symbol.iterator屬性漓穿,則實現(xiàn)了遍歷器Interface
- Symbol.iterator可以返回next(), return(), throw()
set 數(shù)據(jù)結構Iterator使用實例
let sports = new Set().add('Basketball').add('Football').add('Tennis');
console.log(typeof sports[Symbol.iterator]);
console.log(sports[Symbol.iterator]());
for (let sport of sports) {
console.log(sport);
}
為obj添加Iterator
function Respchain(value) {
this.value = value;
this.next = null;
}
Respchain.prototype[Symbol.iterator] = function() {
var iterator = { next: next };
var current = this;
function next() {
if (current) {
var value = current.value;
current = current.next;
return { done: false, value: value };
} else {
return { done: true };
}
}
return iterator;
}
let step1 = new Respchain(1);
let step2 = new Respchain(2);
let step3 = new Respchain(3);
step1.next = step2;
step2.next = step3;
for(let step of step1){
console.log(step);
}
區(qū)別for...in
var arr = ['a', 'b', 'c', 'd'];
for (let a in arr) {
console.log(a); // 0 1 2 3
}
for (let a of arr) {
console.log(a); // a b c d
}
遍歷器的return()
function readLinesSync(file) {
return {
[Symbol.iterator]() {
return {
next() {
return { done: false };
},
return() {
file.close();
return { done: true };
}
};
},
};
}