var arr = ['Foo']; arr.forEach(function(item){ console.log(item); item = 'Lorem'; console.dir(arr[0]); }); for (var item in arr){ arr[item] = 'Ipsum'; console.dir(arr[0]); }
与上面的代码一样,我注意到更改传递给forEach()回调的项的值不会导致迭代对象发生更改.
用于……当然可以.
为什么那&我该如何改变数组中的值?
解决方法
Using for…in certainly does.
不,不.你的forEach循环等同于… in循环(除了顺序):
for (var index in arr) { var item = arr[index]; console.log(item); item = 'Lorem'; console.dir(arr[0]); }
你看到数组也没有修改过吗?那是因为JavaScript始终是pass-by-value,并且有一个非常简单的规则要记住:
Assigning a value to a variable never changes the value of another variable or data structure.
这意味着,为item分配一个新值,不能更改arr的元素.如果你想修改数组,你必须通过为索引赋值来直接改变它,即
arr[index] = 'foo';