關於ES6中for of和for in得問題

2021-10-08 20:52:11 字數 1566 閱讀 8782

整理了一下關於es6中for…in和for…of得筆記

for…in…迴圈讀取鍵名for…of…迴圈讀取鍵值

如果要通過for…of…迴圈,獲取陣列索引,可以借助資料例項的entries方法和keys方法。

set 、map也可使用for…of…迴圈。

首先,遍歷的順序是按照各個成員被新增進資料結構的順序。其次,set 結構遍歷時,返回的是一個值,而 **map 結構遍歷時,返回的是乙個陣列,**該陣列的兩個成員分別為當前 map 成員的鍵名和鍵值。

es6 的陣列、set、map 都部署了以下三個方法,呼叫後都返回遍歷器物件。

並不是所有類似陣列的物件都具有 iterator 介面,乙個簡便的解決方法,就是使用array.from方法將其轉為陣列

對於普通物件,for…of結構不能直接使用,會報錯,必須部署了iterator介面後才能使用。

第一種方法:在這種情況下,可以使用for…in來遍歷鍵名。

let es6 =

;for

(let e in es6)

// edition

// committee

// standard

for(

let e of es6)

// typeerror: es6[symbol.iterator] is not a function

第二種解決方法是:使用object.keys方法將物件的鍵名生成乙個陣列,然後遍歷這個陣列。

for

(var key of object.

keys

(someobject)

)

第三種方法:是使用 generator 函式將物件重新包裝一下。

function

*entries

(obj)

}for

(let

[key, value]

ofentries

(obj)

)// a -> 1

// b -> 2

// c -> 3

for…in迴圈有幾個缺點。

陣列的鍵名是數字,但是for…in迴圈是以字串作為鍵名「0」、「1」、「2」等等。

for…in迴圈不僅遍歷數字鍵名,還會遍歷手動新增的其他鍵,甚至包括原型鏈上的鍵。

某些情況下,for…in迴圈會以任意順序遍歷鍵名。

總而言之,for…in迴圈主要是為遍歷物件而設計的,不適用於遍歷陣列。

for…of迴圈相比上面幾種做法,有一些顯著的優點:

for

(var n of fibonacci)

上面的例子,會輸出斐波納契數列小於等於 1000 的項。如果當前項大於 1000,就會使用break語句跳出for…of迴圈。

關於ES6中for of和for in的理解

關於es6中for of和for in的理解 簡單理解 for in 語句用於迴圈物件屬性。迴圈中的 每執行一次,就會對陣列的元素或者物件的屬性進行一次操作。區別如下 1 遍歷陣列 for of迴圈 var arr 7,2,6,4,5,6,7 申明乙個陣列 for var value of arr ...

ES6中for in和for of的區別

1 for in遍歷的是陣列的索引 即鍵名 而 for of遍歷的是陣列元素值。2 for in會遍歷陣列所有的可列舉屬性,包括原型。for of遍歷的只是陣列內的元素,而不包括陣列的原型 3 for in遍歷順序有可能不是按照實際陣列的內部順序 for var key of object.keys...

ES6新特性 Iterator和for of迴圈

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