forEach、map、for in、 for of

forEach:该方法是对数组的每个元素执行一次给定的函数;他的返回值是 undefined;

  • 与 map() 或者 reduce() 不同的是,它总是返回 undefined 值,并且不可链式调用。 forEach不能改变数组本身,无论是基础数据类型还是引用数据类型都不可以。
    但是!可以用改变person.age的方式改变数组
//数组-基本数据类型
let array = [1,2,3,4];

array.forEach(num => {
    if(num === 4){
        num = 5
    }    
 })
 console.log(array)  //[1,2,3,4]
//对象-引用类型
        let array = [
            {
                name: '小红',
                age: 12
            },
            {
                name: '小明',
                age: 18
            },
        ];

        array.forEach(person => {
            if(person.name === '小红'){
                person.age = 15
                console.log(person === array[0])  //true
            }
        })

        console.log(array)  //[{name: '小红',age: 15},{name: '小明',age: 18},]
  • 与 for…of 不同的是他对于空缺的数组单元不进行任何操作;map、for…in 也不会进行操作;
[1,3,,7].forEach(item=> console.log(item))
// 1, 3. 7
for(let i in[1,3,,7]){ console.log(i)}
// 0, 1, 3

for(let i of[1,3,,7]){
console.log(i)
}
// 1, 3, undefined, 7
  • 不能使用 breck 跳出循环(报错),使用 return 会跳过本次循环,不会跳出循环(可以在 forEach 代码中使用 return
    )
const array1 =['a','b','c'];
array1.forEach(element=>{
	if(element ==='a'){
		return
	} 
	console.log(element)	// 'b', 'c'
});

for…in:以任意顺序遍历一个对象的除Symbol以外的可枚举属性;可以使用 break 跳出循环;在代码中使用 return 会直接报错;在函数体中使用可以跳出循环。

for…of :在可迭代对象(包括 Array,Map,Set,String,TypedArray,arguments 对象等等)上创建一个迭代循环,调用自定义迭代钩子,并为每个不同属性的值执行语句 也是不能使用 return ,会报错;在函数体中使用会跳出循环。

for of 不能遍历对象;
for in 遍历的是数组的索引(即键名),而 for of 遍历的是数组元素值。

map() :创建一个新数组,其结果是该数组中的每个元素是调用一次提供的函数后的返回值;不能使用 break 跳出循环;使用 return 该项返回为 undefined; 他不会改变原数组。

var numbers = [1, 4, 9];
var roots = numbers.map(Math.sqrt);
// roots的值为[1, 2, 3], numbers的值仍为[1, 4, 9]
var arr = [0,0,0];
arr.forEach(val => val = 1);
console.log(arr);	// (3) [0, 0, 0]

for(var i of arr){i = 1};
console.log(arr);	 //(3) [0, 0, 0]

arr.map(val =>val = 1);
console.log(arr);	 //(3) [0, 0, 0]

for(var i in arr){ arr[i] = 1};
console.log(arr);	//(3) [1, 1, 1]
上一篇:迭代器iterator接口


下一篇:JavaScript(JS) array.forEach(callback[, thisObject])