话不多说,直接学
第一组:map()、forEach()
共同点:
- 都只能循环数组
- 接受三个参数:currentItem循环的当前项, index当前项索引(可选), arr原数组(可选)
- return,break 无法中止或跳出循环
- 内部匿名函数的this指向window
区别:
map()
- map()有返回值,返回一个新数组,不改变原数组。
- 用于——需要返回一个新数组时 forEach()
- forEach()无返回值,改变原数组。
- 用于——不改变每一项数据,只是用数据处理一些事项
案例:
map(): 格式化数组中的对象
var arr = [{key: 1, value: 10},
{key: 2, value: 20},
{key: 3, value: 30}];
返回一个新数组
var newArr = arr.map(itemObj => {
var newObj = {};
newObj[itemObj.key] = obj.value;
return newObj;
});
// newArr 新数组为: [{1: 10}, {2: 20}, {3: 30}],
// arr 原数组未被修改:
// [{key: 1, value: 10},
// {key: 2, value: 20},
// {key: 3, value: 30}]
forEach()
let list = [1, 2, 3, 4, 5];
list.forEach((value, index) => {
if(value > 3){
console.log(value) // 4 5
return false;//没有返回值,ruturn false 仍向下执行(使用return不退出执行,使用break报错)
} else {
console.log(value) // 1 2 3
return true;
}
});
第二组:for...in、for...of
for...in
- 通常用于遍历对象
- for...in遍历总是取得对象的键“key”,数组/字符串的下标。 即都为【字符串类型】
- 遍历的顺序不一定是按照下标,而是随机遍历
- 会遍历数组所有的可枚举属性,包括原型里的属性,方法
for...of
- 通常用于遍历数组/字符串/map/set等有迭代器对象的集合。不能遍历对象
- for...of遍历总是取得对象的键“value”,数组/字符串的【值】
- 不会遍历数组所有的可枚举属性,包括原型里的属性,方法
- 与forEach区别,可响应break,return,continue语句
总之:咱要遍历对象——for...in。 遍历数组——for...of
补充:可迭代对象
哪些是可迭代对象
- Set,Map,String,Array,Arguments,Nodelist 如何判断是否为可迭代对象
Array.prototype.hasOwnProperty(Symbol.iterator)