JavaScript's'对于每个'误解

JavaScript's 'forEach' misunderstanding

本文关键字:误解 于每个 JavaScript      更新时间:2023-09-26

此功能正常工作:

function task02(arr) {
  var out = [];
  arr = arr.forEach(function(item, i){
    (item > 0) ? out.push(1) : out.push(0);
  });
  return out;
}

而这个不是(输出undefined(:

function task02(arr) {
  arr = arr.forEach(function(item, i){
    (item > 0) ? item = 1 : item = 0;
  });
  return arr;
}

我尝试过同时使用itemitem[i],但都不起作用。有人能向我解释一下,为什么这不起作用?

有人能向我解释一下,为什么这不起作用?

JavaScript通过传递/调用/分配。这意味着给一个变量赋值不会神奇地改变另一个变量(或数组元素(的值。

更简单的例子:

var foo = 42;
var bar = foo;
foo = 21;

则CCD_ 4仍将具有值CCD_。


在您的情况下,分配给item不会更改数组元素。


和往常一样,如果您使用不熟悉的方法,请先阅读其文档。

第二个示例中的回调函数没有任何副作用。这就是.forEach(在数组上迭代,但返回undefined(和.map.filter.reduce等数组方法的主要区别,它们迭代、对每个项执行回调并返回修改后的数组。

如果你想避免临时数组,在这种情况下你应该使用Array.map

function task02(arr) {
  return arr.map(function(item, i){
    return (item > 0) ? 1 : 0;
  });
}