理解奇怪的数组返回

时间:2015-10-30 10:15:59

标签: 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,因此将其设置为从右到左,而不是从左到右

3 个答案:

答案 0 :(得分:4)

此处foobar都指向内存中的相同位置。实际数组在变量之间共享。所以,基本上他们都访问/更新相同的数组。

非原始数据类型不按值传递,它们通过引用传递。

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

要复制数组,请使用slice

var bar = foo.slice();

答案 1 :(得分:0)

通过引用foo变量来指定

bar。如果你想通过值分配它:

bar = foo.splice(0);

答案 2 :(得分:0)

因为你已经将foo变量赋值给bar并且两者共享相同的内存位置,因此结果是相同的。