Javascript forEach()是否通过引用绑定?
正如上面的代码所示,我注意到更改传递给Javascript forEach()是否通过引用绑定?,javascript,foreach,pass-by-reference,Javascript,Foreach,Pass By Reference,正如上面的代码所示,我注意到更改传递给forEach()回调的项的值不会导致迭代对象发生更改 在中为…使用,当然可以 为什么&我应该如何更改数组中的值? 我发现这个主题在上的描述相当混乱,注意,forEach中的回调函数有三个参数。第二个是当前元素的索引,第三个是数组本身。如果要修改数组,请使用这两个参数。在本例中,项变量是按值传递的,因为它是原始值。如果它是一个json对象,并且您要更改它的一个属性,那么它将反映在原始列表中 在这种情况下,您可以使用forEach具有的其他参数。例如: var
forEach()
回调的项的值不会导致迭代对象发生更改
在中为…使用,当然可以
为什么&我应该如何更改数组中的值?
我发现这个主题在上的描述相当混乱,注意,forEach
中的回调函数有三个参数。第二个是当前元素的索引,第三个是数组本身。如果要修改数组,请使用这两个参数。在本例中,项
变量是按值传递的,因为它是原始值。如果它是一个json对象,并且您要更改它的一个属性,那么它将反映在原始列表中
在这种情况下,您可以使用forEach
具有的其他参数。例如:
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]);
}
使用这些参数,可以直接影响array[index]
在…中使用当然是
不,没有。您的forEach
循环相当于此for…in
循环(订单除外):
你看到数组也没有被修改吗?这是因为JavaScript始终是,并且有一个非常简单的规则需要记住:
将值指定给变量绝不会更改另一个变量或数据结构的值
这意味着,为项
指定一个新值,无法更改arr
的元素。如果你想修改数组,你必须通过给索引赋值来直接改变它,例如
for (var index in arr) {
var item = arr[index];
console.log(item);
item = 'Lorem';
console.dir(arr[0]);
}
访问属性的顺序完全取决于实现。只访问从0到长度的数值属性,并且严格按照数值顺序访问,这与值无关。到MDN的链接断开了,可能是你的意思。你能把你的代码放在这里而不是放在其他网站上吗?我发现这听起来很混乱,因为有对象经过reference@Sprottenwels:不,这是正确的。JavaScript只有传递值。JavaScript中唯一的值是原语和指向对象的指针。“对象”不是值,不能被“传递”。@Sprottenwels:它令人困惑,但“通过引用传递”具有不同且非常具体的含义。你可以在维基百科的文章中读到。还可以看看passbysharing一节,它更接近于JS的工作原理,但这不是一个很常见的术语。这正是我想要的。谢谢
for (var index in arr) {
var item = arr[index];
console.log(item);
item = 'Lorem';
console.dir(arr[0]);
}
arr[index] = 'foo';