2016-04-10 89 views
-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陣列變化?

+0

這是什麼語言服用? –

+0

它的javascript – pomeKRANK

+0

回答很好通過http://stackoverflow.com/questions/7480654/value-type-reference-type-object-in-javascript/ –

回答

3

對象(包括數組)通過引用傳遞(實際上,這就是它的作用......純粹主義者可能不同意這個陳述)。 splice方法突變了原始數組。因此,由於xy指向同一陣列,因此y上的splice也將更改爲x。要做xy的淺克隆,請執行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

相關問題