2017-08-29 3 views
0
var foo = {unique_prop: 1}, bar = {unique_prop: 2}, object = {}; 
object[foo] = 'anu'; 
console.log(object[bar]); 

Der obige Code gibt "anu" aus.Javascript toString-Methode für Eigenschaftsnamen

toString Methode Rolle festgelegt, die nicht-String-Objekt in String-Objekt. Im obigen Code gibt object[bar] den Wert als 'anu' aus.

Document sagt ‚da beide foo und bar auf die gleiche Zeichenfolge konvertiert werden‘

Ich kann nicht in der Lage dem Java-Skript toString Methode auf diesem Code zu verstehen.

kann jemand bitte erklären, wie es funktioniert?

+0

Verwenden Funktionsreferenzen als Eigenschaftsnamen, sind sie selten genau gleich. – Teemu

Antwort

7

Wenn Sie foo ‚s-Wert als Eigenschaftsnamen verwenden, ruft es toString auf die foo wie object[foo.toString()] = 'anu', die, wenn nicht außer Kraft gesetzt, den gleichen Wert für jedes Objekt zurück, das '[object Object]' ist

Also eigentlich haben Sie eine Eigenschaft, deren Name '[object Object]' ist. Unter console.log s wird sichergestellt, dass Sie eine Eigenschaft mit dem Namen '[object Object]' haben.

var foo = {unique_prop: 1}; 
 

 
var object = {}; 
 

 
object[foo] = 'anu'; 
 

 
console.log(`foo.toString() - ${foo.toString()}`); 
 
console.log(`object.toString() - ${object.toString()}`); 
 
console.log(`object.toString() === foo.toString() ? - ${object.toString() === foo.toString()}`); 
 

 
for(var prop in object) { 
 
    console.log(prop); 
 
}

+0

Dank @Suren Srapyan. Sie haben die Funktionsweise des Codes klar erklärt. Jetzt sind meine Zweifel geklärt. Danke noch einmal. – Asha

Verwandte Themen