整理了一下關於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...