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

732 阅读1分钟

for in和for of的区别
1、for in遍历(object)键名
2、for of遍历(array)键值,for of不可以遍历普通对象

for in

let obj = {a:1,b:2,c:3}
for (let key in obj) {
  console.log(key) // a,b,c
}

for in循环只遍历可枚举属性(包括原型链上的可枚举属性)

Object.prototype.key1 = function(){}
Array.prototype.key2 = function(){}
let arr = [1,2,3]
arr.foo = 'hello'

for (let i in arr){
  console.log(i) // 0 1 2 foo key2 key1
}

//避免输出原型属性,用hasOwnProperty()来判断输出的值是否为自身属性
for (let i in arr){
 if (arr.hasOwnProperty(i)){
  console.log(i) // 0 1 2 foo 
 }
}

for of

for of可迭代的对象有:Array,map,set,String,TypedArray,arguments等

let arr = [1,2,3]
arr.foo = 'hello'
for (let i of arr){
  console.log(i) //1 2 3
}

map

特点
1、map会返回新数组,对元素组不产生影响
2、map无法使用return,break中断循环

let arr = [1,2,3]
const result = arr.map(item=>{
   return item*2
})
console.log(arr) // [1,2,3]
console.log(result) // [2,4,6]

forEach

特点
1、forEach不会返回执行结果,返回值为undefined
2、forEach会修改原来的数组
3、forEach不能使用break中断循环

  let arr = [1,2,3,4]
  let res = arr.forEach((item,index,input) => {
    return input[index] = item*2
  })
  console.log(arr)// [2, 4, 6, 8]
  console.log(res)// undefined  

总结

for of和for in的区别:

1、for of遍历键值,但是不能遍历对象
2、for in遍历键名,包括原型链上的可枚举属性

map和forEach的区别
1、map会返回新数组,对元素组不产生影响
2、map无法使用return,break中断循环
3、forEach不会返回执行结果,返回值为undefined
4、forEach会修改原来的数组
5、forEach不能使用break中断循环

参考链接

链接1
链接2
链接3
链接4