2016-04-10 6 views
-1

Blick auf den folgenden Code:Warum ändert splice() beide Arrays?

var x = [1, 2, 3], y; 
y = x; 
y.splice(0,0,4); 

die gibt:

y = [4, 1, 2, 3] // (correct) 

x = [4, 1, 2, 3] // (why did this change too?) 

Warum hat die Änderung x Array, wenn ich .splice() auf y genannt?

+0

Welche Sprache ist das? –

+0

es ist Javascript – pomeKRANK

+0

Beantwortet ziemlich gut von http://stackoverflow.com/questions/7480654/value-type-reference-type-object-in-javascript/ –

Antwort

3

Objekte (einschließlich Arrays) werden per Referenz übergeben (effektiv ist dies, was es tut ... - Puristen können mit dieser Aussage nicht übereinstimmen). Die splice Methode mutiert das ursprüngliche Array. Da sich x und y auf dasselbe Array zeigen, ändert sich auch splice auf yx. Um einen flachen Klon von x in y zu machen, tun Sie y = x.slice(). (Beachten Sie, dass alle Objekte innerhalb x nicht geklont werden, werden sie als Referenz übergeben werden.)

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 

Entnommen value type reference type object in javascript