es6 呼叫 Iterator 介面的場合

2021-08-15 03:20:58 字數 1855 閱讀 4844

有一些場合會預設呼叫 iterator介面(即symbol.iterator方法),除了下文會介紹的for...of迴圈,還有幾個別的場合。

(1)解構賦值

對陣列和 set 結構進行解構賦值時,會預設呼叫symbol.iterator方法。

let 

set=

newset

().add

('a'

).add

('b'

).add

('c'

);

let [x

,y]=

set;

// x='a'; y='b'

let

[first

,...

rest]=

set;

// first='a'; rest=['b','c'];

(2)擴充套件運算子

擴充套件運算子(...)也會呼叫預設的 iterator介面。

// 例一

var

str

='hello'

;

[...

str]

// ['h','e','l','l','o']

// 例二

let arr =[

'b',

'c'];

[

'a',

...arr

,'d'

]

// ['a', 'b', 'c', 'd']

上面**的擴充套件運算子內部就呼叫 iterator介面。

實際上,這提供了一種簡便機制,可以將任何部署了 iterator介面的資料結構,轉為陣列。也就是說,只要某個資料結構部署了 iterator介面,就可以對它使用擴充套件運算子,將其轉為陣列。

let arr 

=[...

iterable

];

(3)yield*

yield*後面跟的是乙個可遍歷的結構,它會呼叫該結構的迭代器介面。

let generator 

=function*()

;

var

iterator

=generator

();

iterator

.next

()//

iterator

.next

()//

iterator

.next

()//

iterator

.next

()//

iterator

.next

()//

iterator

.next

()//

(4)其他場合

由於陣列的遍歷會呼叫迭代器介面,所以任何接受陣列作為引數的場合,其實都呼叫了迭代器介面。下面是一些例子。

ES6的Iterator物件詳解

建立乙個指標物件,指向當前資料結構的起始位置。也就是說,遍歷器物件本質上,就是乙個指標物件。第一次呼叫指標物件的next方法,可以將指標指向資料結構的第乙個成員。第二次呼叫指標物件的next方法,指標就指向資料結構的第二個成員。不斷呼叫指標物件的next方法,直到它指向資料結構的結束位置。每一次呼叫...

es6 字串的 Iterator 介面

字串是乙個類似陣列的物件,也原生具有 iterator介面。var somestring hi typeof somestring symbol iterator function var iterator somestring symbol iterator iterator next itera...

ES6新特性 Iterator和for of迴圈

迭代過程 獲取迭代器 指向當前資料結構的起始位置 通過物件的某些方法返回迭代器物件。如 多次呼叫iterator.next 向下迭代指向下乙個位置。當done為true時遍歷結束。如要重新迭代,需要重新獲取迭代器 從第1步重新開始 string array set map dom元素 開發中。obj...