概念

迭代器是不同數(shù)據(jù)結(jié)構(gòu)的訪問機(jī)制接口。只要部署了迭代器接口,任何數(shù)據(jù)結(jié)構(gòu)都可以被遍歷。

作用

迭代器有三個(gè)功能:

為各種數(shù)據(jù)結(jié)構(gòu)提供一個(gè)統(tǒng)一的,簡(jiǎn)便的訪問接口使得數(shù)據(jù)結(jié)構(gòu)的成員能夠按照某種次序排列ES6創(chuàng)造了一種遍歷命令,for...of循環(huán)

有一個(gè)next方法,每次調(diào)用next方法都會(huì)返回?cái)?shù)據(jù)結(jié)構(gòu)的當(dāng)前成員信息,其中value屬性是當(dāng)前成員的值,done屬性是一個(gè)布爾值,表示變量是否結(jié)束。

默認(rèn)Iterator接口

迭代器接口的目的是為所有數(shù)據(jù)結(jié)構(gòu)提供統(tǒng)一的訪問機(jī)制,也就是說...循環(huán)。當(dāng)一個(gè)...循環(huán)用于遍歷數(shù)據(jù)結(jié)構(gòu),循環(huán)會(huì)自動(dòng)找到迭代器接口。

只要使用迭代器接口部署,數(shù)據(jù)結(jié)構(gòu)就被稱為“可遍歷的”。

ES6規(guī)定默認(rèn)迭代器接口部署在數(shù)據(jù)結(jié)構(gòu)的Symbol.iterator屬性中,或者只要數(shù)據(jù)結(jié)構(gòu)具有Symbol.iterator屬性,它就被認(rèn)為是“可遍歷的”。通過調(diào)用Symbol.iterator方法,可以得到當(dāng)前數(shù)據(jù)結(jié)構(gòu)的默認(rèn)遍歷生成器函數(shù)。

原生具備Iterator接口的數(shù)據(jù)結(jié)構(gòu)

數(shù)組、映射、集合、字符串、類型行、函數(shù)的參數(shù)對(duì)象、節(jié)點(diǎn)列表對(duì)象

yield*yield*后面跟的是一個(gè)可遍歷的結(jié)構(gòu),它會(huì)調(diào)用該結(jié)構(gòu)的遍歷器接口。

其他場(chǎng)合由于數(shù)組的遍歷會(huì)調(diào)用遍歷器接口,所以任何接受數(shù)組作為參數(shù)的場(chǎng)合其實(shí)都調(diào)用了遍歷器的接口例如:for ... of、Array.from、Map、Set、WeakMap、WeakSet、Promise.all、Promise.race字符串的Iterator接口

字符串是帶有本機(jī)迭代器接口的類似數(shù)組的對(duì)象。

Iterator接口與Generator函數(shù)

符號(hào)迭代器方法最簡(jiǎn)單的實(shí)現(xiàn)是生成器函數(shù)。

遍歷對(duì)象的return、throw

除了下一個(gè)方法之外,遍歷對(duì)象還有一個(gè)返回方法和一個(gè)拋出方法。

return:

返回方法的使用場(chǎng)合是退出...如果一個(gè)對(duì)象在遍歷后需要清理或釋放資源,可以部署返回方法。

注意:返回方法必須返回一個(gè)對(duì)象,該對(duì)象由生成器規(guī)范決定。

throw:

Throw方法主要與Generator函數(shù)結(jié)合使用,但該方法不適用于一般測(cè)力計(jì)對(duì)象。

1.《iterator Iterator的概念》援引自互聯(lián)網(wǎng),旨在傳遞更多網(wǎng)絡(luò)信息知識(shí),僅代表作者本人觀點(diǎn),與本網(wǎng)站無關(guān),侵刪請(qǐng)聯(lián)系頁腳下方聯(lián)系方式。

2.《iterator Iterator的概念》僅供讀者參考,本網(wǎng)站未對(duì)該內(nèi)容進(jìn)行證實(shí),對(duì)其原創(chuàng)性、真實(shí)性、完整性、及時(shí)性不作任何保證。

3.文章轉(zhuǎn)載時(shí)請(qǐng)保留本站內(nèi)容來源地址,http://f99ss.com/guoji/1748971.html