为什么splice()会改变两个数组?

时间:2016-04-10 01:47:15

标签: javascript arrays splice

请查看以下代码:

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数组会发生变化?

1 个答案:

答案 0 :(得分:3)

对象(包括数组)通过引用传递(实际上,这就是它的作用...... - 纯粹主义者可能不同意这种说法)。 splice方法改变了原始数组。因此,由于xy指向同一个数组,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

取自value type reference type object in javascript