JavaScript中的2D数组中出现意外的值更改

时间:2013-08-13 21:12:53

标签: javascript arrays

我正在尝试修改2D数组中的一个值。但是我发现了一些基于数组构造方式的奇怪行为。

矩阵和矩阵2之间的唯一区别在于它们是如何构造的。但是,当我更改[1] [1]值时,matrix2中的所有[x] [1]值都会更改:

矩阵:

[ [ 0, 0, 0 ], [ 0, 1, 0 ], [ 0, 0, 0 ] ]

Matrix2(意外):

[ [ 0, 1, 0 ], [ 0, 1, 0 ], [ 0, 1, 0 ] ]

代码:

var row = [0,0,0];
var matrix = [[0,0,0],[0,0,0],[0,0,0]];
var matrix2 = [row, row, row];
console.log(matrix);
console.log(matrix2);
matrix[1][1] = 1;
matrix2[1][1] = 1;
console.log(matrix);
console.log(matrix2);

有人可以解释发生了什么吗?

1 个答案:

答案 0 :(得分:2)

[row, row, row]

你刚刚制作了一个数组,其中有三个引用相同的内部数组。

通过对它的任何引用都可以看到对内部数组的更改。

您想要创建内部数组的三个副本 您可以通过调用.slice()来创建数组的浅表副本。