for in與for of, 數組與 對象 的遍歷


for of 與 for in 的區別

for..of適用遍歷數/數組對象/字符串/map/set等擁有迭代器對象的集合.但是不能遍歷對象,因為沒有迭代器對象.與forEach()不同的是,它可以正確響應break、continue和return語句

for-of循環不支持普通對象,但如果你想迭代一個對象的屬性,你可以用for-in循環(這也是它的本職工作)或內建的Object.keys()方法

for in 可以遍歷到myObject的原型方法method,如果不想遍歷原型方法和屬性的話

 

 

 

 結果,對象正常,數組原型上的東西被遍歷下來了

 

數組的遍歷

1.普通for循環

var arr = [1,2,0,3,9];
 for ( var i = 0; i <arr.length; i++){
    console.log(arr[i]);
}

2.優化版for循環

使用變量,將長度緩存起來,避免重復獲取長度,數組很大時優化效果明顯

for(var j = 0,len = arr.length; j < len; j++){
    console.log(arr[j]);
}

3.forEach

ES5推出的,數組自帶的循環,主要功能是遍歷數組

arr.forEach(function(value,i){
  console.log('forEach遍歷:'+i+'--'+value);

})

forEach這種方法也有一個小缺陷:你不能使用break語句中斷循環,也不能使用return語句返回到外層函數。

 

4.map遍歷

map即是 “映射”的意思 用法與 forEach 相似,同樣不能使用break語句中斷循環,也不能使用return語句返回到外層函數。

arr.map(function(value,index){
    console.log('map遍歷:'+index+'--'+value);
});

map遍歷支持使用return語句,支持return返回值

var temp=arr.map(function(val,index){
  console.log(val);  
  return val*val           
})
console.log(temp);  

forEach、map都是ECMA5新增數組的方法,所以ie9以下的瀏覽器還不支持

5.for-of遍歷

ES6新增功能

for( let i of arr){
    console.log(i);
}
  • for-of這個方法避開了for-in循環的所有缺陷
  • 與forEach()不同的是,它可以正確響應break、continue和return語句 

for-of循環不僅支持數組,還支持大多數類數組對象,例如DOM NodeList對象。for-of循環也支持字符串遍歷

 

對象遍歷

1.for-in遍歷

for-in是為遍歷對象而設計的,不適用於遍歷數組。(遍歷數組的缺點:數組的下標index值是數字,for-in遍歷的index值"0","1","2"等是字符串)

for-in循環存在缺陷:循環會遍歷對象自身的和繼承的可枚舉屬性(不含Symbol屬性)

for (var index in arr){
    console.log(arr[index]);
    console.log(index);
}

2.使用Object.keys()遍歷

返回一個數組,包括對象自身的(不含繼承的)所有可枚舉屬性(不含Symbol屬性).

復制代碼
var obj = {'0':'a','1':'b','2':'c'};

Object.keys(obj).forEach(function(key){

     console.log(key,obj[key]);

});

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM