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);