for in 和 for of 的區別

2022-06-22 05:54:12 字數 971 閱讀 1917

for...of 是es6出現的 迴圈遍歷的是值

語句在可迭代物件(包括 array, map, set, string, typedarray,arguments 物件等等)上建立乙個迭代迴圈,對每個不同屬性的屬性值,呼叫乙個自定義的有執行語句的迭代掛鉤.

也就是說,for of只可以迴圈可迭代物件的可迭代屬性,不可迭代屬性在迴圈中被忽略了。

for..in是 es5出現的 迴圈遍歷的是屬性,遍歷出的是自身和原型上的可列舉非symbol屬性,遍歷不一定按照順序

var arr = [1,2,4,5];

for(let i in arr)

console.log(arr[i]);

arr.b = 5;

for(let i in arr)

console.log(i)

//b也會被列印出來!

防止自定義attri被列印出來,可以這麼用:

for(let i in obj)

if(obj.hasownproperty(key)..

為什麼不建議用for...in 遍歷,都說它的迭代出的順序是不一定的?

如果在網上查的話,會發現for...in的遍歷順序其實是有乙個演算法的:

(先把整數排序,其他的按建立物件的順序)

(其實就是在控制台定義乙個物件,你點開這個物件展示出的屬性的順序)

既然都有順序了..為什麼還不建議用這個es5中的for..in來遍歷,mdn文件都說順序是任意的呢?

因為不同環境下對這個方法的實現不一樣,而且在for in的過程中對這個物件屬性的新增,修改,刪除操作不能被保證, mdn不建議用這個來遍歷物件。

只建議debug用

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陣列實際上也是乙個物件,它的每個元素的索引被視為乙個屬性。當...