请查看以下代码:
var x = [1, 2, 3], y;
y = x;
y.splice(0,0,4);
给出:
y = [4, 1, 2, 3] // (correct)
x = [4, 1, 2, 3] // (why did this change too?)
为什么在x
上调用.splice()
时,y
数组会发生变化?
答案 0 :(得分:3)
对象(包括数组)通过引用传递(实际上,这就是它的作用...... - 纯粹主义者可能不同意这种说法)。 splice
方法改变了原始数组。因此,由于x
和y
指向同一个数组,splice
上的y
也会更改x
。要对x
进行y
的浅层复制,请执行y = x.slice()
。 (请注意,x
中的任何对象都不会被克隆;它们将通过引用传递。)
var a = [1,2,3];
var b = a;
a[0] = 42;
alert(b[0]); // will show 42
var c = a.slice(); // explicitly makes a copy
a[1] = 6502;
alert(c[1]); // will show 2, not 6502