2016-04-13 6 views
0

Nur versuchen zu verstehen, warum das passiert ist.Javascript Objekte und Arrays Referenzen verhalten sich unterschiedlich dependens auf die Tiefe

Ich experimentierte ein wenig mit Javascript-Arrays, Objekten und Verweisen auf die Objekte. Dann habe ich einen Punkt erreicht, an dem ich nichts mehr verstehe.

Ich erstelle ein Array, das ein Objekt enthält; dann, wenn ich einen Verweis auf das Objekt mache und eine Eigenschaft ändere; Die Werte des Originals und der Referenz werden automatisch geändert. Offensichtlich, weil es eine Referenz und keine Kopie ist.

Ich habe das gleiche erwartet, wenn ich ein Array mit einem Objekt erzeuge, das ein anderes Objekt hält und mit einem anderen Array verknüpft, aber in diesem Fall bleibt das ursprüngliche Objekt irgendwie unberührt.

Wahrscheinlich Es hat eine wirklich einfache Erklärung, die ich gerade nicht weiß. Jemand könnte mir das erklären?

Danke!

var foo = [ 
 
    { 
 
    "bar": "bar" 
 
    } 
 
]; 
 

 
var ref = foo[0]; 
 
ref.bar = "new bar"; 
 

 
console.info(foo[0].bar);    // output: new bar 
 
console.info(ref.bar);     // output: new bar 
 
console.info(foo[0].bar === ref.bar); // output: true 
 

 
var foo2 = [ 
 
    { 
 
    "bar2": [ 
 
     { "nested": "nested" } 
 
    ] 
 
    } 
 
]; 
 

 
var ref2 = foo2[0].bar2; 
 
ref2.nested = "nested 2"; 
 

 
console.info(foo2[0].bar2[0].nested);     // output: nested 
 
console.info(ref2.nested);        // output: nested 2 
 
console.info(foo2[0].bar2[0].nested === ref2.nested); // output: false

Antwort

0

Alles geht in Ordnung. Nichts hat sich verändert. Du hast es gut verstanden. Es ist nur, dass Sie setzen foo2 [0] .bar2 in var ref2.

var ref2 = foo2[0].bar2; 

Sie sehen foo2 [0] .bar2 ist ein Array hier. wenn Sie

tat
*ref2.nested = "nested 2";* 

Es hat ein neues Objekt zu ref2. , was Sie tun möchten, ist

*var ref2 = foo2[0].bar2[0];* 

Oder irgendetwas anderes subtil. Javascript ist der gleiche Freund. Es sind nur wir, die den Bezug verlieren.

+0

danke! Wirklich albern ... hahaha – ius

Verwandte Themen