長(zhǎng)沙網(wǎng)站建設(shè)有限公司網(wǎng)絡(luò)推廣的概念
寫在前面
在JavaScript中,Iterator(遍歷器)是一種接口,用于遍歷數(shù)據(jù)結(jié)構(gòu)(如數(shù)組、對(duì)象等)中的元素。它提供了一種統(tǒng)一的方式來(lái)訪問(wèn)集合中的每個(gè)項(xiàng),包括值和位置。
默認(rèn) Iterator 接口
許多內(nèi)置的JavaScript對(duì)象都有默認(rèn)的Iterator接口,例如:
- Array對(duì)象:可以使用
for...of
循環(huán)或Array.prototype[Symbol.iterator]()
方法來(lái)獲取其Iterator對(duì)象。 - Map和Set對(duì)象:同樣可以使用
for...of
循環(huán)或Map.prototype[Symbol.iterator]()
和Set.prototype[Symbol.iterator]()
方法來(lái)獲取其Iterator對(duì)象。 - String對(duì)象:可以使用
for...of
循環(huán)或String.prototype[Symbol.iterator]()
方法來(lái)獲取其Iterator對(duì)象。
調(diào)用 Iterator 接口的場(chǎng)合
當(dāng)你需要遍歷一個(gè)數(shù)據(jù)結(jié)構(gòu)中的所有元素時(shí),可以使用Iterator接口。例如:
const arr = [1, 2, 3];
const iterator = arr[Symbol.iterator]();console.log(iterator.next()); // { value: 1, done: false }
console.log(iterator.next()); // { value: 2, done: false }
console.log(iterator.next()); // { value: 3, done: false }
console.log(iterator.next()); // { value: undefined, done: true }
字符串的 Iterator 接口
字符串的Iterator接口允許我們逐個(gè)字符地遍歷字符串。例如:
const str = 'hello';
const iterator = str[Symbol.iterator]();console.log(iterator.next()); // { value: 'h', done: false }
console.log(iterator.next()); // { value: 'e', done: false }
console.log(iterator.next()); // { value: 'l', done: false }
console.log(iterator.next()); // { value: 'l', done: false }
console.log(iterator.next()); // { value: 'o', done: false }
console.log(iterator.next()); // { value: undefined, done: true }
Iterator 接口與 Generator 函數(shù)
Generator函數(shù)是一種特殊的函數(shù),它可以用來(lái)生成Iterator對(duì)象。例如:
function* generateNumbers() {yield 1;yield 2;yield 3;
}const iterator = generateNumbers();console.log(iterator.next()); // { value: 1, done: false }
console.log(iterator.next()); // { value: 2, done: false }
console.log(iterator.next()); // { value: 3, done: false }
console.log(iterator.next()); // { value: undefined, done: true }
遍歷器對(duì)象的 return() 和 throw()
遍歷器對(duì)象有兩個(gè)額外的方法:return()
和throw()
。
return()
:可以在遍歷器完成之前強(qiáng)制結(jié)束遍歷,并返回一個(gè)指定的值。throw()
:可以在遍歷器中拋出一個(gè)錯(cuò)誤。
例如:
function* generateNumbers() {yield 1;yield 2;yield 3;
}const iterator = generateNumbers();console.log(iterator.next()); // { value: 1, done: false }
console.log(iterator.return(42)); // { value: 42, done: true }
console.log(iterator.next()); // { value: undefined, done: true }// throw() example
try {console.log(iterator.throw(new Error('Something went wrong')));
} catch (error) {console.error(error); // Something went wrong
}
for…of 循環(huán)
for...of
循環(huán)是JavaScript中的一種語(yǔ)法結(jié)構(gòu),用于遍歷可迭代對(duì)象(如數(shù)組、字符串、Map、Set等)。它會(huì)自動(dòng)調(diào)用對(duì)象的Iterator接口來(lái)獲取每個(gè)元素。例如:
const arr = [1, 2, 3];for (const num of arr) {console.log(num);
}
// Output: 1, 2, 3const str = 'hello';for (const char of str) {console.log(char);
}
// Output: h, e, l, l, o
總之,Iterator和for...of
循環(huán)提供了一種強(qiáng)大而靈活的方式來(lái)遍歷和處理各種類型的數(shù)據(jù)結(jié)構(gòu)。