1、for...in 迴圈:只能獲得物件的鍵名,不能獲得鍵值
for...of 迴圈:允許遍歷獲得鍵值
var arr = ['red', 'green', 'blue']for(let item in arr)
/*for in item 0
for in item 1
for in item 2
*/for(let item of arr)
/*for of item red
for of item green
for of item blue
*/
2、對於普通物件,沒有部署原生的 iterator 介面,直接使用 for...of 會報錯
var obj =for(let key of obj)
// uncaught typeerror: obj is not iterable
可以使用 for...in 迴圈遍歷鍵名
for(let key in obj)/*for in key name
for in key age
*/
也可以使用 object.keys(obj) 方法將物件的鍵名生成乙個陣列,然後遍歷這個陣列
for(let key of object.keys(obj))/*key name
key age
*/
3、for...in 迴圈不僅遍歷數字鍵名,還會遍歷手動新增的其它鍵,甚至包括原型鏈上的鍵。for...of 則不會這樣
let arr = [1, 2, 3]arr.set = 'world' // 手動新增的鍵
array.prototype.name = 'hello' // 原型鏈上的鍵
for(let item in arr)
/*item 0
item 1
item 2
item set
item name
*/for(let value of arr)
/*value 1
value 2
value 3
*/
4、foreach 迴圈無法中途跳出,break 命令或 return 命令都不能奏效
let arr = [1, 2, 3, 5, 9]arr.foreach(item =>
console.log('item', item)
})/*
item 1
item 3
item 5
item 9
*/
for...of 迴圈可以與break、continue 和 return 配合使用,跳出迴圈
for(let item of arr)console.log('item', item)
} // item 1
5、無論是 for...in 還是 for...of 都不能遍歷出 symbol 型別的值,遍歷 symbol 型別的值需要用 object.getownpropertysymbols() 方法
for(let key in
obj)
/*c --> es6
d --> dom
*/let objsymbols =object.getownpropertysymbols(obj)
console.info(objsymbols)
//[symbol(a), symbol(b)]
objsymbols.foreach(item =>)
/*symbol(a) --> hello
symbol(b) --> world
*/ 方法可以返回所有型別的鍵名,包括常規鍵名和symbol鍵名
let keyarray =reflect.ownkeys(obj)
console.log(keyarray)
//["c", "d", symbol(a), symbol(b)]
}
總之,for...in 迴圈主要是為了遍歷物件而生,不適用於遍歷陣列
for...of 迴圈可以用來遍歷陣列、類陣列物件,字串、set、map 以及 generator 物件
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陣列實際上也是乙個物件,它的每個元素的索引被視為乙個屬性。當...