Javascript 理解奇怪的数组返回
我正在努力理解以下内容:Javascript 理解奇怪的数组返回,javascript,arrays,Javascript,Arrays,我正在努力理解以下内容: var foo = [100, 2], bar = foo; bar[0] = 9; console.log(foo[0], bar[0]); // returns => 9, 9 我理解bar[0]返回9,因为它设置为那样-但是foo[0]如何返回9,而不是返回100 似乎foo变成了bar,因此将其从右向左设置,而不是从左向右设置这里foo和bar都指向内存中的同一位置。实际数组在变量之间共享。因此,基本上它们都访问/更新相同的数组 非基本数据类
var foo = [100, 2],
bar = foo;
bar[0] = 9;
console.log(foo[0], bar[0]); // returns => 9, 9
我理解bar[0]
返回9,因为它设置为那样-但是foo[0]
如何返回9,而不是返回100
似乎
foo
变成了bar
,因此将其从右向左设置,而不是从左向右设置这里foo
和bar
都指向内存中的同一位置。实际数组在变量之间共享。因此,基本上它们都访问/更新相同的数组
非基本数据类型不是通过值传递的,而是通过引用传递的
_______ _______
| foo | --> [...] <-- | bar |
| | | |
------- -------
foo
通过引用bar
变量进行赋值。如果要按值分配,请使用:
bar = foo.splice(0);
由于您已将foo变量分配给bar,并且两者共享相同的内存位置,因此结果相同。
bar=foo代码>创建对foo
的引用bar
,它不是完整副本。如果您需要foo
的副本,您可以使用.slice
-bar=foo.slice()
bar
存储foo
的引用,因此,如果更改了bar,那么foo也会更改…如果您不希望更改它们,请使用元素的深度副本!
bar = foo.splice(0);