新聞中心
JavaScript 中的內(nèi)置可迭代對(duì)象是那些實(shí)現(xiàn)了迭代器接口的對(duì)象,這個(gè)接口由一個(gè)@@iterator方法定義,此方法返回一個(gè)包含next方法的對(duì)象,當(dāng)調(diào)用next方法時(shí),它返回一個(gè)具有兩個(gè)屬性{value, done}的對(duì)象,其中value是序列中的下一個(gè)值,done是一個(gè)布爾值,如果迭代完成則為true,否則為false。

成都創(chuàng)新互聯(lián)公司2013年成立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站制作、網(wǎng)站設(shè)計(jì)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元鄂倫春做網(wǎng)站,已為上家服務(wù),為鄂倫春各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:13518219792
以下是一些內(nèi)置的可迭代對(duì)象:
1、數(shù)組(Array)
數(shù)組是最基本的可迭代對(duì)象之一,可以使用for...of循環(huán)或者Array.prototype.entries()、Array.prototype.values()等迭代方法來遍歷數(shù)組。
2、字符串(String)
字符串也是可迭代的,在遍歷字符串時(shí),每次迭代會(huì)得到字符串中的一個(gè)字符。
3、Map 和 Set
這兩種數(shù)據(jù)結(jié)構(gòu)都實(shí)現(xiàn)了@@iterator方法,并且可以通過for...of循環(huán)進(jìn)行遍歷,對(duì)于Map,迭代會(huì)返回鍵值對(duì)的數(shù)組,而對(duì)于Set,則只返回其值。
4、TypedArray
包括Int8Array、Uint8Array、Uint8ClampedArray、Int16Array、Uint16Array、Int32Array、Uint32Array、Float32Array和Float64Array,這些視圖提供了在內(nèi)存中操作原始二進(jìn)制數(shù)據(jù)的方法,并實(shí)現(xiàn)了可迭代接口。
5、Generator 函數(shù)
當(dāng)創(chuàng)建一個(gè)生成器函數(shù)并調(diào)用它時(shí),它不會(huì)立即執(zhí)行,而是返回一個(gè)特殊的迭代器,稱為生成器,通過調(diào)用生成器的next方法可以產(chǎn)生一系列的值。
6、NodeList 和 HTMLCollection
在瀏覽器環(huán)境中,像document.querySelectorAll返回的NodeList或類似window.open返回的HTMLCollection這樣的類數(shù)組對(duì)象也是可迭代的。
7、arguments 對(duì)象
函數(shù)的arguments對(duì)象也具有迭代接口,盡管它不是一個(gè)真正的數(shù)組,但它可以被當(dāng)作一個(gè)數(shù)組來遍歷。
除了以上提到的內(nèi)置可迭代對(duì)象,開發(fā)者也可以通過自定義對(duì)象的Symbol.iterator方法來創(chuàng)建自己的可迭代對(duì)象。
自定義可迭代對(duì)象
要使自定義對(duì)象成為可迭代對(duì)象,你需要在其原型上定義一個(gè)使用Symbol.iterator符號(hào)的方法。
const myIterable = {
[Symbol.iterator]: function* () {
yield 1;
yield 2;
yield 3;
}
};
for (let value of myIterable) {
console.log(value); // 輸出 1, 2, 3
}
在這個(gè)例子中,我們定義了一個(gè)名為myIterable的對(duì)象,并在其上實(shí)現(xiàn)了一個(gè)生成器函數(shù)作為迭代器,這使得我們可以使用for...of循環(huán)來遍歷該對(duì)象。
相關(guān)問題與解答
Q1: 如何判斷一個(gè)對(duì)象是否是可迭代的?
A1: 你可以使用typeof運(yùn)算符來檢查對(duì)象是否具有[Symbol.iterator]方法:
const isIterable = typeof obj[Symbol.iterator] === 'function';
Q2: 我能否在非內(nèi)置對(duì)象上使用for...of循環(huán)嗎?
A2: 可以,只要你的對(duì)象實(shí)現(xiàn)了迭代器接口(即具有[Symbol.iterator]方法),你就可以使用for...of循環(huán)來遍歷它。
Q3: JavaScript 中的哪些對(duì)象不是可迭代的?
A3: 大多數(shù)原生對(duì)象類型如數(shù)字、布爾值、null、undefined以及普通對(duì)象都不是可迭代的,除非它們明確地實(shí)現(xiàn)了迭代器接口。
Q4: 如果我自己定義了一個(gè)可迭代對(duì)象,我該如何中斷迭代?
A4: 在自定義迭代器中,你可以通過拋出一個(gè)異常來中斷迭代過程,當(dāng)異常被拋出時(shí),for...of循環(huán)將停止執(zhí)行。
當(dāng)前題目:js中的內(nèi)置可迭代對(duì)象有哪些
文章來源:http://fisionsoft.com.cn/article/cdehddj.html


咨詢
建站咨詢
