建立乙個指標物件,指向當前資料結構的起始位置。也就是說,遍歷器物件本質上,就是乙個指標物件。
第一次呼叫指標物件的next方法,可以將指標指向資料結構的第乙個成員。
第二次呼叫指標物件的next方法,指標就指向資料結構的第二個成員。
不斷呼叫指標物件的next方法,直到它指向資料結構的結束位置。
每一次呼叫next方法,都會返回資料結構的當前成員的資訊。具體來說,就是返回乙個包含value和done兩個屬性的物件。其中,value屬性是當前成員的值,done屬性是乙個布林值,表示遍歷是否結束。
es6 裡的迭代器並不是一種新的語法或者是新的內建物件(建構函式), 而是一種協議,所有遵循了這個協議的物件都可以稱之為迭代器物件,所以說迭代器是一種協議,乙個統一的介面標準,兩個屬性都不返回值也不會報錯,但是不符合協議標準了,就不能稱作迭代器了
在es6中,有三類資料結構原生具備iterator介面:陣列、某些類似陣列的物件、set和map結構
,物件(object)之所以沒有預設部署iterator介面,是因為物件的哪個屬性先遍歷,哪個屬性後遍歷是不確定的,需要開發者手動指定。
iterator介面部署在物件的symbol.iterator
屬性上, 可以呼叫這個屬性,就得到遍歷器物件。
var arr = ['a', 'b', 'c'];
var iterator = arr[symbol.iterator]();
var a = iterator.next();
console.log(a) //
for...in 遍歷每乙個屬性名稱,而 for...of遍歷每乙個屬性值。
在物件沒有部署iterator介面的情況下呼叫for...of會報錯。當乙個部署了iterator介面的物件呼叫for...of時,
實現的步驟是這樣的:
呼叫物件的symbol.iterator的屬性獲得遍歷器生成函式;
呼叫遍歷器生成函式返回遍歷器物件
其實for...of就相當於一直呼叫遍歷器物件的next方法,直到返回done為true;
ES6 細化ES6之 物件的擴充套件
物件的屬性 屬性表示法es6 允許在大括號裡面,直接寫入變數和函式,作為物件的屬性和方法 es5 let name 張無忌 function sayme es5定義物件的屬性和方法的方式 var obj console.log obj.name 張無忌es6 let name 張無忌 functio...
es6 呼叫 Iterator 介面的場合
有一些場合會預設呼叫 iterator介面 即symbol.iterator方法 除了下文會介紹的for.of迴圈,還有幾個別的場合。1 解構賦值 對陣列和 set 結構進行解構賦值時,會預設呼叫symbol.iterator方法。let set newset add a add b add c l...
ES6新特性 Iterator和for of迴圈
迭代過程 獲取迭代器 指向當前資料結構的起始位置 通過物件的某些方法返回迭代器物件。如 多次呼叫iterator.next 向下迭代指向下乙個位置。當done為true時遍歷結束。如要重新迭代,需要重新獲取迭代器 從第1步重新開始 string array set map dom元素 開發中。obj...