for of 蕾哟、for in一忱、forEach比較
forEach
forEach無法中途跳出forEach循環(huán),break谭确、continue和return都不奏效帘营。
for in
for...in 循環(huán)只遍歷可枚舉屬性。
像 Array和 Object使用內(nèi)置構(gòu)造函數(shù)所創(chuàng)建的對象都會繼承自O(shè)bject.prototype和String.prototype的不可枚舉屬性逐哈,例如 String 的 indexOf() 方法或 Object的toString()方法芬迄。
循環(huán)將遍歷對象本身的所有可枚舉屬性,以及對象從其構(gòu)造函數(shù)原型中繼承的屬性(更接近原型鏈中對象的屬性覆蓋原型屬性)昂秃。
for...in不應(yīng)該用于迭代一個 Array禀梳,其中索引順序很重要择诈。
for in 循環(huán)的輸出順序問題
先遍歷出整數(shù)屬性(integer properties,按照升序)出皇,然后其他屬性按照創(chuàng)建時候的順序遍歷出來。
var obj = {? a:1,'2':1,'1':1,? d:1,? c:1,'3':1}
obj.b=66;
for(var key in obj) { console.log(key ); }
//"1","2","3","a","d","c","b"
Object.keys(obj);
?//["1","2","3","a","d","c","b"]
Object.keys()和for in 具有相同的排列順序
for of
有著同for...in一樣的簡潔語法哗戈,但是沒有for...in那些缺點郊艘。
不同于forEach方法,它可以與break唯咬、continue和return配合使用纱注。
提供了遍歷所有數(shù)據(jù)結(jié)構(gòu)的統(tǒng)一操作接口。
1.for..of適用遍歷數(shù)/數(shù)組對象/字符串/map/set等擁有迭代器對象的集合.但是不能遍歷對象,因為沒有迭代器對象.與forEach()不同的是胆胰,它可以正確響應(yīng)break狞贱、continue和return語句
2.for-of循環(huán)不支持普通對象,但如果你想迭代一個對象的屬性蜀涨,你可以用for-in循環(huán)(這也是它的本職工作)或內(nèi)建的Object.keys()方法:
for(varkeyofObject.keys(someObject)){console.log(key+": "+someObject[key]);}
遍歷map對象時適合用解構(gòu),例如;
for(var[key,value]of phoneBookMap){console.log(key+"'s phone number is: "+value);}