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中断循环