2016-07-15 15 views
-1

Warum bis not equal bis null am Ende des folgenden Codes?Das gleiche Objekt ist nicht immer das Gleiche?

var a = { property: "value" }, 
    b = a; 
console.log(a === b); // true 

a = null; 
console.log(b); // Object { property: "value" } 

Ich dachte, dass a und b zwei zu einem Objekt gebunden Referenzen und wird daher null wurde beides.

+0

http://stackoverflow.com/questions/518000/is-javascript-a-pass-by-reference-or-pass-by-value-language –

+0

@BirjuShah: http://stackoverflow.com/a/ 3638034/4554883 –

+0

das ist wahr, aber warum erwarten Sie, dass b null ist. Ich meine, wie verstehst du es mit dem Kommentar –

Antwort

0

In der Zeile:

a = 5; 

Sie zeigen ‚a‘ auf einen neuen Speicherblock eine ganze Zahl von Wert 5, die Sie ursprünglich erstellt es ist vorherige Referenz auf das Objekt zu überschreiben. Versuchen Sie stattdessen:

var a = { property: "value" }, 
b = a; 
console.log(a === b); // true 

a.property = 5; 
console.log(b); // Object {property: 5} 

Auf diese Weise Sie nicht a überschreiben, sondern die Änderung der Speicherblock die Taste property Punkte aus einem String mit dem Wert "value", auf eine ganze Zahl mit dem Wert 5.

Dadurch wird der Verweis a auf den Speicherblock beibehalten, der das ursprünglich erstellte Objekt enthält. In der nächsten Zeile wird ebenfalls 'b' angezeigt.

Edit: Das obige war Ihre vorherige Frage zu beantworten. Wenn Sie a auf null setzen, löscht es einfach seine Referenz auf das ursprüngliche Objekt. Das Objekt wird nicht Müll gesammelt, während irgendetwas (b in diesem Fall) immer noch einen Verweis darauf hat. Nachdem Sie b erstellen, sind die Verweise unabhängig, aber beide verweisen auf denselben Speicherblock.

+0

Meintest du 'a.property = 5'? –

+0

Hoppla, mein Fehler, kopieren und fügen Sie den falschen Teil aus der Datei. –

Verwandte Themen