-1
請看下面的代碼: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?)
爲什麼當我呼籲y
.splice()
的x
陣列變化?
請看下面的代碼: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?)
爲什麼當我呼籲y
.splice()
的x
陣列變化?
對象(包括數組)通過引用傳遞(實際上,這就是它的作用......純粹主義者可能不同意這個陳述)。 splice
方法突變了原始數組。因此,由於x
和y
指向同一陣列,因此y
上的splice
也將更改爲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
這是什麼語言服用? –
它的javascript – pomeKRANK
回答很好通過http://stackoverflow.com/questions/7480654/value-type-reference-type-object-in-javascript/ –