for、for...in、for...of、forEach和map的区别

403 阅读1分钟

遍历数组 //for…in遍历属性名称key,for…of遍历属性值value

for(let i in arr){
      console.log(i)   //0,1,2    索引值
 }
 for(let item of arr){
     console.log(item )   //a,b,c     es6的语法
 }
var arr=[10,20,30];
 var newArr1=arr.forEach(function(value,index,array){
 //value为遍历的当前元素,index为当前索引,array为正在操作的数组
     return value*2
})
console.log(newArr1);   //undefined     forEach没有返回值
console.log(arr);   //[10,20,30]      原数组

 var newArr2=arr.map(function(value,index,array){
 //value为遍历的当前元素,index为当前索引,array为正在操作的数组
     return value*2
})
console.log(newArr2);   //[20,40,60]    map有返回值
console.log(arr);   //[10,20,30]      仍然为原数组

arr.map(function(value,index,array){
     array[index]=value*2;
})
console.log(arr);   //[20.40,60]    
//通过下标改变数组的值, 这点和forEach相同

遍历对象

let obj={a:1,b:2}
for(let i in obj){
     console.log(i)   //a,b
}
for(let item of obj){     //不可用于遍历对象
     console.log(item)       //TypeError
}

Object.keys()和Object.values()来遍历对象。它们都是返回数组。

Object.keys(obj)      //[a,b]
Object.values(obj)    //[1,2]