Array.prototype.forEach() |
您所在的位置:网站首页 › js遍历数组对象并取值 › Array.prototype.forEach() |
forEach() 方法是一个迭代方法。它按索引升序地为数组中的每个元素调用一次提供的 callbackFn 函数。与 map() 不同,forEach() 总是返回 undefined,而且不能继续链式调用。其典型的用法是在链式调用的末尾执行某些操作。 callbackFn 仅对已赋值的数组索引调用。对于稀疏数组中的空槽,它不会被调用。 forEach() 不会改变其调用的数组,但是,作为 callbackFn 的函数可以更改数组。请注意,在第一次调用 callbackFn 之前,数组的长度已经被保存。因此: 当调用 forEach() 时,callbackFn 不会访问超出数组初始长度的任何元素。 已经访问过的索引的更改不会导致 callbackFn 再次调用它们。 如果 callbackFn 更改了数组中已经存在但尚未访问的元素,则传递给 callbackFn 的值将是在访问该元素时的值。已经被删除的元素不会被访问。警告: 上述类型的并发修改经常导致难以理解的代码,通常应避免(特殊情况除外)。 forEach() 方法是通用的。它只期望 this 值具有 length 属性和整数键的属性。 除非抛出异常,否则没有办法停止或中断 forEach() 循环。如果有这样的需求,则不应该使用 forEach() 方法。 可以通过像 for、for...of 和 for...in 这样的循环语句来实现提前终止。当不需要进一步迭代时,诸如 every()、some()、find() 和 findIndex() 等数组方法也会立即停止迭代。 forEach() 期望的是一个同步函数,它不会等待 Promise 兑现。在使用 Promise(或异步函数)作为 forEach 回调时,请确保你意识到这一点可能带来的影响。 jsconst ratings = [5, 4, 5]; let sum = 0; const sumFunction = async (a, b) => a + b; ratings.forEach(async (rating) => { sum = await sumFunction(sum, rating); }); console.log(sum); // 期望的输出:14 // 实际的输出:0如果希望按顺序的或者并发的执行一系列操作,可以查看 promise 组合。 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |