for in 和 for of 的對比

2021-08-14 03:28:10 字數 768 閱讀 8463

fon infor of最大的區別就是:乙個是對鍵名key的遍歷,乙個是對鍵值value的遍歷

使用for in也能遍歷陣列,但會存在一些問題:

index索引為字串型數字,不能直接進行幾何運算

和遍歷順序物件的行為一樣,使用for in會遍歷陣列所有可列舉的屬性,所以原型物件上的方法和屬性也會被遍歷

遍歷的順序可能不是按照實際陣列的內部順序

// 所以遍歷出來的索引是"0"、"1"這種形式的

// memethod 這個原型物件上的屬性也會被遍歷出來

// 出來的順序也不一定是原先書寫的順序

let arr = [1, 2, 3];

array.prototype.mymethod = function

() ;

for of專注於遍歷的value值的同時,不會發生原型物件,和物件本身的屬性被遍歷出來的問題。同樣是上面的例子,它不會出現mymethod這個屬性值

最後,兩個無關誰更好用,每個方法都有對應的場景,看誰更適合。結合上面的利弊分析,結論是:

遍歷物件使用for in,遍歷陣列使用for of更加合適

for of 和 for in 的區別

var obj for var key of obj 出錯 uncaught typeerror obj is not iterablevar obj for var key in obj 結果是 a b cvar arr 3 5,7 for var i in arr 結果是 0 1 2var ar...

for in 和for of的區別

es5的話也可以使用foreach,es5具有遍歷陣列功能的還有map filter some every reduce reduceright等,只不過他們的返回結果不一樣。但是使用foreach遍歷陣列的話,使用break不能中斷迴圈,使用return也不能返回到外層函式。array.proto...

for in 和for of 的區別

最近在學習es6的知識,看到了for of 這新的迴圈方法,所以就測試一下和以前for in有什麼不同,一下是一些不同地方,當然還有其他不同的,暫時還沒有發現 for in迴圈由於歷史遺留問題,它遍歷的實際上是物件的屬性名稱。乙個array陣列實際上也是乙個物件,它的每個元素的索引被視為乙個屬性。當...