将数组分配给另一个变量时,将传递引用而不是值。使用==
运算符比较两个数组时会确认这一点,并返回true
var a = [[1,2],[3,4],[5,6]];
var b = a; // b = [[1,2],[3,4],[5,6]]
var c = [].concat(a); // c = [[1,2],[3,4],[5,6]]
a == b; //true
a == c; //false
使用上述输入,当我修改数组b
时,它会改变数组a
,但不会改变c
。
b.push([7,8]); // b = [[1,2],[3,4],[5,6], [7,8]]
a; //a = [[1,2],[3,4],[5,6], [7,8]]
c; //c = [[1,2],[3,4],[5,6]]
但是,当我执行以下操作时,它会改变c
。
b[0].push(5); // b = [[1,2,5],[3,4],[5,6], [7,8]]
a; //a = [[1,2,5],[3,4],[5,6], [7,8]]
c; //c = [[1,2,5],[3,4],[5,6]]
为什么会这样?使用改变数组的数组方法会发生这种情况。