理解奇怪的数组返回

4

我对以下内容感到困惑:

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,因此赋值是从右向左进行的,而不是从左向右进行的。


bar = foo; 创建一个对 foo 的引用,而不是完全的复制。如果你需要 foo 的副本,你可以使用 .slice - bar = foo.slice() - Oleksandr T.
bar 存储了 foo 的引用,因此如果更改 bar,则 foo 也会更改... 如果您不希望它们被更改,则使用元素的深拷贝! - Rayon
3个回答

4

这里的foobar都指向内存中相同的位置。实际的数组在变量之间共享,因此它们都访问/更新同一个数组。

非基本数据类型不是按值传递的,而是按引用传递。

_______                _______
| foo | --> [...] <--  | bar |
|     |                |     |
-------                -------

要复制数组,请使用 slice

var bar = foo.slice();

0

foo 被引用赋值给 bar 变量。如果你想按值赋值,请使用:

bar = foo.splice(0);

0

由于您将foo变量分配给bar,并且两者共享相同的内存位置,因此结果相同。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接