2017-06-17 3 views
-3

Lernen von JavaScript und habe über etwas gestolpert, das ich nicht herausfinden kann. Öffnen devtools und gehen Sie zu Ihrer KonsoleJavascript: Bitte erklären Sie, was diese for-Schleife macht

countries = ['Germany', 'Argentina', 'Brazil', 'Netherlands']; 

for (country in countries[1]) { 
    console.log(country); //or console.log(countries) 
}; 

ich vorausgesagt, es würde entweder
A: Nur der erste Index laufen Ausgabe von „Argentinien“ oder
B: Start aus dem ersten Index bis zum Ende.

Stattdessen läuft es 9 Mal und indexiert das gesamte Array. Warum läuft es 9 Mal, und gibt es einen Grund, warum sollte es jemals verwendet werden oder habe ich gerade etwas ziemlich nutzlos?

+0

erweitern Sie Ihren Code Protokolliere beide, * key * UND * value *: 'console.log ('key:', country, 'value:', Länder [1] [Land]);' – Thomas

Antwort

1

A für .. in Schleife bedeutet, dass die Eigenschaften eines Objekts durchlaufen werden.

countries[1] ist eine Zeichenfolge. Ergo

for (country in countries[1]) 

bedeutet, über die Eigenschaften eines String-Objekts in einer Schleife, um country die Eigenschaftsnamen zuweisen. In Javascript sind Array-artige Dinge nur Objekte, deren Eigenschaften zufällig numerisch sind. Und so nimmt country die Nummern 0, 1, 2 usw. an. Es läuft 9 mal, weil 'Argentinien' neun Buchstaben hat.

Wenn Sie dann in der Schleife Zugang waren:

countries[1][country] 

Jede Iteration würden Sie in der Folge ein Zeichen geben A, r, g, e, n usw.

0

Sie durchläuft die Zeichen (oder vielmehr ihre Indizes) in der Zeichenfolge 'Argentina'.

Die for ... in-Schleife ist einer der Teile von JavaScript, die Sie wirklich lesen sollten, bevor Sie sie im Produktionscode verwenden. Es tut oft nicht, was Sie erwarten könnten, weil es über alle aufzählbaren Eigenschaften eines Objekts iterieren wird (das möglicherweise zur Prototypkette des Objekts gehört, anstatt nur das Objekt selbst).

Sie wollen wahrscheinlich eine regelmäßige alte for-Schleife:

for (var i = 0; i < countries.length; i++) { 
    console.log(countries[i]); 
} 

Wenn Sie in einer Umgebung, wo Sie ES6 (wie node.js oder transpiling mit babel/Typoskript) verwenden können, können Sie verwenden für ... der Schleife:

for (const country of countries) { 
    console.log(country); 
} 
0

für ... in kehrt der Schlüssel von dem, was ihr durchlaufen.

für ... von gibt den Wert jedes Elements des Containers zurück, durch den Sie iterieren.

Wenn Sie für ... davon verwendet würde ausdrucken Argentinien.

0

Da Sie eine Schleife über countries[1] führen, wird eine Schleife über die Zeichen in der Zeichenfolge 'Argentina' ausgeführt. Da 'Argentina' neun Buchstaben hat, wird die Schleife neun Mal durchlaufen.

0

Sie durchlaufen Land [1], in diesem Fall "Argentinien". Der Wert von 'var' country wird bei jeder Iteration in den Index geändert, den es im String country [1] ansieht. Um dies am besten zu veranschaulichen, können Sie dieses Skript ausprobieren, das jeden Buchstaben von Argentinien sowie die Methoden, die über den String-Prototyp verfügbar sind.

countries = ['Germany', 'Argentina', 'Brazil', 'Netherlands']; 

for (country in countries[1]) { 
console.log(countries[1][country]); 
}; 
0

In JavaScript können Sie Array innerhalb Array haben. In Ihrem Code fragen Sie nach einer Schleife, die das Array [1] Index von countries[] Array iterieren soll.

Jetzt in Ihrem Array ist eine Zeichenfolge im Index [1] vorhanden. Also bricht Js es in ein Zeichenarray auf und wiederholt es.

0

die for in -Statement akzeptiert eine Object als zweites Argument nach in. Wenn Sie ein Array übergeben, wird es zu einem Object gezwungen. Das erste Argument ist nicht der Wert aber der Schlüssel.So ‚argentina‘ gezwungen wird wahrscheinlich ein Objekt wie zu sein:

{0:'a',1:'r',2:'g',3:'e',4:'n',5:'t',6:'i',7:'n',8:'a'} 

Also, wenn Sie console.log(countries[country]); versuchen wird es Zeichen loggt sein.

Es ist ziemlich nutzlos. JS hat eine Menge Dinge ziemlich nutzlos, dann hat es einen guten Teil. Versuchen Sie den guten zu benutzen.

Verwandte Themen