2016-04-26 9 views
0

Ich bin ein Neuling auf Javascript und NodeJS verwende ich ausdrücklich und rufen Sie den LinkExtrahieren von Name/Wert eines Objekts

localhost: 7080/v1/Kino/Auftrag/benachrichtigen/einfügen züchten = Whippet & Alter = 10

dann versucht, die Eigenschaftsnamen und den entsprechenden Wert zu extrahieren:

console.log(req.query.breed);  //1 
    console.log(req.query.age);  //2 
    for (var name in req.query) {  //Extracting property and its value 
     console.log(name);   //property name 
     console.log(req.query[name]); //3 
     console.log(req.query.name); //4 
    } 

Können Sie sich erklären, warum 3 funktioniert gut, während 4 gibt den Wert als undefiniert? 1 & 2 funktionieren auch gut.

+0

'a.b' sucht nach einer Eigenschaft namens' b'. 'a [b]' sucht nach einer Eigenschaft, deren Name durch die Variable 'b' definiert ist. –

Antwort

0

Auf JavaScript-Objekte wird über Zeichenkettentypen zugegriffen. Wenn Sie .name verwenden, interpretiert Javascript dies als Schlüssel von "name" im req.query-Objekt.

Wenn JavaScript [name] verwendet, wird alternativ der mit dieser Variablen verknüpfte Zeichenfolgenwert anstelle des Variablennamens selbst verwendet.

Allgemeine Faustregel: Wenn Sie JavaScript-Variablen zum Nachschlagen von Objektwerten verwenden, verwenden Sie immer Klammernotation. [name]

0

der Grund # 3 Werke ist, weil:

for (var name in req.query) {  //Extracting property and its value 

     console.log(req.query[name]); //3 

    } 

'name' hier ein Verweis auf den "Schlüssel" in req.query ist. Es gibt keinen Schlüssel „name“ so, wenn Sie sagen: req.query.name - es Fehler, weil Abfrage keinen Schlüssel „name“ hat, aber wenn man iterieren seine Schlüssel ala ...

for (var name in req.query) 

" Name "hier ist nur eine Referenz. Es enthält den Verweis auf die Schlüsselnamen, wenn Sie über das Objekt iterieren.

als Beispiel wie folgt vorgehen:

var obj = { 
    age: 100, 
    year: 1980, 
    color: "blue" 
} 

for (var name in obj) { 
    console.log('KEY IS: ', name) 
} 

aber, tun Sie "obj" bemerken keinen Schlüssel "name" hat ... so "obj.name" Fehler würden zu tun.

0

Ich denke, alle oben genannten Antworten sind richtig, aber ein Beispiel, bei Versuch platzieren, dies zu veranschaulichen:

var foo = [1, 2, 3, 4, 5]; 
console.log(foo); 

for(i in foo) 
console.log(i); 

for(i in foo) 
console.log(foo[i]); 

for(i in foo) 
console.log(foo.i); 

Der Schlüssel Anstoß hier zwischen foo ist [i] und foo.i ‚i‘ in foo [i] haben in der Iteratorschleife eine besondere Bedeutung. Und der Wert von i ist gleich dem iterierten Eintrag. Wenn wir also in jeder Iteration durch das Objekt laufen, wird 'i' den Eintrag halten, also funktioniert foo [i].

'i' in foo.i hat keine spezielle Bedeutung in der Iteratorschleife. 'i' wird nicht als Variable behandelt, sondern als bekanntes, benanntes Attribut des Containerobjekts foo. Das 'i' in foo.i und das i im Iterator sind unterschiedlich. Da wir kein Feld namens 'i' haben, wird ein Fehler ausgegeben.

Hoffe, das hilft.