一、概述
1、一種介面,為各種不同的資料結構提供統一的訪問機制。任何資料結構只要部署iterator介面,就可以完成遍歷操作
2、呼叫指標物件的next方法,就可以遍歷事先給定的資料結構
3、每一次呼叫next方法,都會返回資料結構的當前成員的資訊。具體來說,就是返回乙個包含value和done兩個屬性的物件。其中,value屬性是當前成員的值,done屬性是乙個布林值,表示遍歷是否結束。
4、凡是部署了symbol.iterator屬性的資料結構,就稱為部署了遍歷器介面。呼叫這個介面,就會返回乙個遍歷器物件。
二、資料結構的預設iterator介面
1、物件的symbol.iterator屬性,指向該物件的預設遍歷器方法。
2、具備iterator介面的原生資料結構:
陣列某些類似陣列的物件
set和map結構。
3、其他資料結構(主要是物件)的iterator介面,都需要自己在symbol.iterator屬性上面部署,這樣才會被for…of迴圈遍歷
4、嚴格地說,物件部署遍歷器介面並不是很必要,因為這時物件實際上被當作map結構使用
5、對一般物件部署迭代器物件:
複製**
/***
//迭代器物件
const soul_iterator=,
next():;
},soul_exchange()
// console.log(array);
return array;}};
//測試物件
function objtest(){}
objtest.prototype=;
//部署迭代器物件
objtest.prototype.proto=soul_iterator;
//建立測試物件的例項
var newobj=new objtest();
// for…of 測試
for(let i of newobj)
//next()方法測試
// console.log(newobj.next());
// console.log(newobj.next());
// console.log(newobj.next());
// console.log(newobj.next());
複製**
6、對於類似陣列的物件(存在數值鍵名和length屬性),部署iterator介面,有乙個簡便方法,就是symbol.iterator方法直接引用陣列的iterator介面
nodelist.prototype[symbol.iterator] = array.prototype[symbol.iterator];
7、如果symbol.iterator方法對應的不是遍歷器生成函式(即會返回乙個遍歷器物件),解釋引擎將會報錯
三、呼叫iterator介面的場合
1、預設呼叫iterator介面的情況:
解構賦值
擴充套件運算子 //只要某個資料結構部署了iterator介面,就可以對它使用擴充套件運算子,將其轉為陣列
yield* //yield*後面跟的是乙個可遍歷的結構,它會呼叫該結構的遍歷器介面
for…of
array.from()
map(), set(), weakmap(), weakset()(比如new map([[『a』,1],[『b』,2]]))
promise.all()
promise.race()
四、字串的iterator介面
1、字串是乙個類似陣列的物件,也原生具有iterator介面。
五、iterator介面和generator函式
1、generator可以很容易的實現iterator介面
2、實現方式:
複製**
var myiterable = {};
myiterable[symbol.iterator] = function* () ;
複製**
3、yield命令給出每一步的返回值。
六、iterator物件的return()和throw()
1、next方法是必須部署的,return方法和throw方法是否部署是可選的
2、return方法必須返回乙個物件
3、return方法主要用於提前退出
4、throw方法主要是配合generator函式使用,一般的遍歷器物件用不到這個方法
七、for…of
1、凡是部署了iterator物件的物件,都可以使用for…of取得值
iterator迭代器怎麼用
迭代器 iterator 有時又稱游標,它是一種物件,能夠用來遍歷容器中的元素,每個迭代器物件代表容器中的確定的位址。我一般在遍歷集合的時候使用迭代器,呼叫iterator 方法會返回集合的迭代器,剛獲得迭代器的時候,迭代器的游標指向第乙個元素的前面,通過hasnext 可以判斷游標的後面還有沒有元...
Vector容器與iterator迭代器
首先,回顧一下 的用法 是運算子中等級最高的,它分為三種 1 global scope 全域性作用域符 用法 name 2 class scope 類作用域符 用法 class name 3 namespace scope 命名空間 作用域符 用法 namespace name 他們都是左關聯 le...
迭代器模式(Iterator)
迭代器模式 iterator 提供一種方法順序訪問乙個聚合物件中的各種元素,而又不暴露該物件的內部表示。當你需要訪問乙個聚合物件,而且不管這些物件是什麼都需要遍歷的時候,就應該考慮使用迭代器模式。另外,當需要對聚集有多種方式遍歷時,可以考慮去使用迭代器模式。迭代器模式為遍歷不同的聚集結構提供如開始 ...