为什么这个映射函数不会改变原始数组中的值?

joh*_*thy 2 javascript arrays ecmascript-6

这是有问题的代码:

const array = [
  1, 2, 3
]

array.map(item => {
  item = item + 1
})

console.log(array)
Run Code Online (Sandbox Code Playgroud)

我认为该方法item中的(第一个)参数map是对数组中原始项目的引用,并且直接改变它会更改第一个数组的内容......这不是真的吗?

Fal*_*aly 5

您的数组包含基元类型元素(此处为整数)。原始类型的变量不能通过其引用进行改变。例如,如果数组的元素是对象,则可以进行变异,如下所示:

var array = [{val: 1}, {val: 2}, {val: 3}];
array.map(item => {item.val = item.val + 1});
console.log(array);
Run Code Online (Sandbox Code Playgroud)

  • @Jonah通过执行item = item + 1,您可以重新分配并释放引用。即使对于对象,如果重新分配,也会丢失引用,并且原始对象不会发生变化 (2认同)