Читать книгу JavaScript – Das Handbuch für die Praxis - David Flanagan - Страница 130
5.4.4for/of
ОглавлениеIn ES6 wurde eine weitere Schleifenanweisung eingeführt: for/of. Diese neue Art von Schleife nutzt zwar das Schlüsselwort for, unterscheidet sich aber deutlich von der gewöhnlichen for-Schleife. (Sie ist auch völlig anders als die ältere for/in-Schleife, die wir in 5.4.5 behandeln.)
Die for/of-Schleife arbeitet mit iterierbaren Objekten. Was genau es für ein Objekt bedeutet, iterierbar zu sein, besprechen wir in Kapitel 12. In diesem Kapitel und an dieser Stelle ist nur die Tatsache wichtig, dass Arrays, Strings, Sets und Maps iterierbar sind: Sie alle sind eine Folge oder Menge von Elementen, die man mit einer for/of-Schleife durchlaufen kann.
Das folgende Beispiel veranschaulicht, wie wir mit for/of die Elemente eines Arrays von Zahlen in einer Schleife durchlaufen und ihre Summe berechnen können:
let data = [1, 2, 3, 4, 5, 6, 7, 8, 9], sum = 0;
for(let element of data) {
sum += element;
}
sum // => 45
Oberflächlich betrachtet, ähnelt die Syntax einer normalen for-Schleife: Auf das for-Schlüsselwort folgt ein Paar runder Klammern, die die Einzelheiten darüber enthalten, was die Schleife tun soll. In diesem Fall enthalten die Klammern eine Variablendeklaration (bei bereits deklarierten Variablen ansonsten einfach den Namen der Variablen), gefolgt vom Schlüsselwort of und einem Ausdruck, der ein iterierbares Objekt auswertet, wie in diesem Fall das Array data. Wie bei allen Schleifen folgt der Körper einer for/of-Schleife auf die runden Klammern, umschlossen von geschweiften Klammern.
In unserem Beispiel wird der Schleifenkörper für jedes Element des Arrays data einmal ausgeführt. Vor jeder Ausführung wird jeweils das nächste Element des Arrays der Elementvariablen zugewiesen. Dabei wird das Array der Reihe nach vom ersten bis zum letzten Element durchlaufen.
Arrays werden »live« iteriert – Änderungen, die während des Durchlaufs vorgenommen werden, können das Ergebnis der Iteration beeinflussen. Fügen wir in obigem Code die Zeile data.push(sum); innerhalb des Schleifenkörpers hinzu, erzeugen wir damit eine Endlosschleife, da die Iteration niemals das letzte Element des Arrays erreichen kann.