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

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


咨詢
建站咨詢
