迭代器介面與for of

2021-10-22 03:57:21 字數 2211 閱讀 1489

首先在es6中有三大最重要的部分:class(類相關),promise,module(模組化)。

我主要說promise,這裡有乙個知識順序就是promise是什麼,解決了什麼問題,然後promise的最終解決方案是async await,同時async await的由來是生成器,生成器生成的是迭代器,這樣就連線起來了。

為了引出迭代器我先寫了一些東西:

var arr =[1

,2,3

,4]var str =

'abc'

var obj =

for(

var i =

0; i < arr.length; i++

)for

(var i =

0; i < str.length; i++

) arr.

foreach

(i => console.

log(i)

)for

(var k in obj)

這些是一些常見的資料型別,那麼在我們需要對這些資料進行遍歷的時候是很麻煩的。因為不同的資料型別有不同的遍歷的方法。所以為了有一種統一的遍歷方式於是就有了迭代,在es6中增加了for…of語法

var arr =[1

,2,3

,4]var str =

'abc'

var obj =

for(

let i of arr)

for(

let i of str)

for(

let i of obj)

但是輸出後我們發現陣列和字串都能執行,但是物件報錯了,因為物件缺少了這個:

也就是iterator 介面

遍歷器(iterator)就是這樣一種機制。它是一種介面,為各種不同的資料結構提供統一的訪問機制。任何資料結構只要部署 iterator 介面,就可以完成遍歷操作(即依次處理該資料結構的所有成員)。

iterator 的作用有三個:一是為各種資料結構,提供乙個統一的、簡便的訪問介面;二是使得資料結構的成員能夠按某種次序排列;三是 es6 創造了一種新的遍歷命令for…of迴圈,iterator 介面主要供for…of消費。

我們來列印一下這個方法:

我們呼叫這上面的next方法時

inter .

next()

// inter .

next()

// inter .

next()

// inter .

next()

// inter .

next()

//

所以說:iterator 的遍歷過程是這樣的。

(1)建立乙個指標物件,指向當前資料結構的起始位置。也就是說,遍歷器物件本質上,就是乙個指標物件。

(2)第一次呼叫指標物件的next方法,可以將指標指向資料結構的第乙個成員。

(3)第二次呼叫指標物件的next方法,指標就指向資料結構的第二個成員。

(4)不斷呼叫指標物件的next方法,直到它指向資料結構的結束位置。

每一次呼叫next方法,都會返回資料結構的當前成員的資訊。具體來說,就是返回乙個包含value和done兩個屬性的物件。其中,value屬性是當前成員的值,done屬性是乙個布林值,表示遍歷是否結束。

其實我們可以模擬一下這個方法:

function

makeiter

(arr)

}return}}

}

這就是迭代器的原理

擴充套件補充:

原生具備 iterator 介面的資料結構如下。

array

mapset

string

typedarray

函式的 arguments 物件

nodelist 物件

迭代器和 for of 迴圈

1.for迴圈 支援break continue return等 for var index 0 index myarray.length index 2 foreach 不支援break continue return false相當於continue myarray.foreach functi...

遍歷器與 for of 迴圈

iterator 的作用 iterator 遍歷器 迭代器 for 1,2 foreach new set foreach iterator 也是用來遍歷的 尋找 iterator const it 1 2 symbol.iterator 使用 iterator const it 1 2 symbo...

js中for of 的使用和迭代器

for.of是es6中引入的新特性,它主要的作用是 迴圈乙個可迭代的物件。它可以迴圈遍歷,陣列 字串 set物件等等,先來看兩個簡單的例子 遍歷字串 let str hello for item of str 遍歷陣列 let arr 1,2,3,4,5 for arritem of arr 遍歷物...