Get to know MDN better
Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.
Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit Juli 2015 browserübergreifend verfügbar.
Die for...of-Anweisung führt eine Schleife aus, die mit einer Sequenz von Werten arbeitet, die von einem iterierbaren Objekt stammen. Zu iterierbaren Objekten gehören Instanzen von eingebauten Objekten wie Array, String, TypedArray, Map, Set, NodeList (und andere DOM-Sammlungen) sowie das arguments Objekt, Generatoren, die von Generatorfunktionen erzeugt wurden, und benutzerdefinierte Iterables.
Empfängt bei jeder Iteration einen Wert aus der Sequenz. Kann entweder eine Deklaration mit const, let, var, using, await using oder ein Zuweisungsziel (z. B. eine zuvor deklarierte Variable, eine Objekteigenschaft oder ein Destrukturierungsmuster) sein. Variablen, die mit var deklariert werden, sind nicht lokal zur Schleife, d.h. sie befinden sich im selben Gültigkeitsbereich, in dem die for...of Schleife steht.
iterableEin iterierbares Objekt. Die Quelle der Wertsequenz, auf der die Schleife operiert.
statementEine Anweisung, die bei jeder Iteration ausgeführt wird. Kann auf variable referieren. Sie können eine Blockanweisung verwenden, um mehrere Anweisungen auszuführen.
Eine for...of-Schleife arbeitet mit den Werten, die aus einem iterierbaren Objekt nacheinander in sequenzieller Reihenfolge stammen. Jede Operation der Schleife mit einem Wert wird als Iteration bezeichnet, und die Schleife wird als Iterieren über das Iterable bezeichnet. Jede Iteration führt Anweisungen aus, die auf den aktuellen Sequenzwert verweisen können.
Wenn eine for...of-Schleife über ein iterierbares Objekt iteriert, ruft sie zuerst die [Symbol.iterator]() Methode des iterierbaren Objekts auf, welche einen Iterator zurückgibt und ruft dann wiederholt die next() Methode des resultierenden Iterators auf, um die Sequenz von Werten zu erzeugen, die der variable zugewiesen werden.
Eine for...of-Schleife wird beendet, wenn der Iterator abgeschlossen ist (das next()-Resultat ist ein Objekt mit done: true). Wie bei anderen Schleifenanweisungen können Sie innerhalb der statement Anweisung Kontrollflussanweisungen verwenden:
Wenn die for...of-Schleife frühzeitig beendet wurde (z. B. wird eine break-Anweisung getroffen oder ein Fehler ausgelöst), wird die return() Methode des Iterators aufgerufen, um jegliche Aufräumarbeiten durchzuführen.
Der variable Teil von for...of akzeptiert alles, was vor dem = Operator stehen kann. Sie können const verwenden, um die Variable zu deklarieren, solange sie nicht innerhalb des Schleifenkörpers neu zugewiesen wird (sie kann zwischen Iterationen geändert werden, da es sich um zwei separate Variablen handelt). Andernfalls können Sie let verwenden.
Hinweis: Jede Iteration erzeugt eine neue Variable. Die Neu-Zuweisung der Variable im Schleifenkörper beeinflusst nicht den ursprünglichen Wert im iterierbaren Objekt (z. B. in einem Array).
Variablen, die mit der using oder await using Deklaration deklariert werden, werden jedes Mal entsorgt, wenn eine Schleifeniteration abgeschlossen ist (und await using führt zu einem impliziten await am Ende der Iteration). Wenn jedoch die Schleife vorzeitig beendet wird, werden alle Werte im Iterator, die noch nicht besucht wurden, nicht entsorgt (obwohl der aktuelle Wert entsorgt wird).
Sie können Destrukturierung verwenden, um mehrere lokale Variablen zuzuweisen, oder einen Eigenschafts-Accessor wie for (x.y of iterable) verwenden, um den Wert einer Objekteigenschaft zuzuweisen.
Jedoch gibt es eine spezielle Regel, die verbietet, async als Variablennamen zu verwenden. Dies ist ungültige Syntax:
Dies dient dazu, Syntaxambiguität mit dem gültigen Code for (async of => {};;) zu vermeiden, welches eine for Schleife ist.
Ähnlich, wenn Sie die using Deklaration verwenden, dann kann die Variable nicht of genannt werden:
Dies dient dazu, Syntaxambiguität mit dem gültigen Code for (using of []) zu vermeiden, bevor using eingeführt wurde.
Strings werden durch Unicode-Codepunkte iteriert.
Sie können über das arguments-Objekt iterieren, um alle Parameter zu überprüfen, die in eine Funktion übergeben wurden.
Das folgende Beispiel fügt Klassen read zu Absätzen hinzu, die direkte Nachkommen des <article> Elements sind, indem über eine DOM-Sammlung von NodeList iteriert wird.
Über ein Objekt mit einer [Symbol.iterator]() Methode iterieren, welche einen benutzerdefinierten Iterator zurückgibt:
Über ein Objekt mit einer [Symbol.iterator]() Generator-Methode iterieren:
Iterable Iteratoren (Iteratoren mit einer [Symbol.iterator]() Methode, die this zurückgeben) sind eine recht häufige Technik, um Iteratoren in Syntaxen, die Iterables erwarten, wie for...of, nutzbar zu machen.
Ausführung der break-Anweisung in der ersten Schleife verursacht, dass diese frühzeitig beendet wird. Der Iterator ist noch nicht fertig, sodass die zweite Schleife dort fortfährt, wo die erste unterbrochen wurde.
Generatoren implementieren die return() Methode, die dazu führt, dass die Generatorfunktion früh zurückkehrt, wenn die Schleife beendet wird. Dies macht Generatoren nicht zwischen Schleifen wiederverwendbar.
Sowohl for...in als auch for...of-Anweisungen iterieren über etwas. Der Hauptunterschied zwischen ihnen besteht darin, worüber sie iterieren.
Die for...in-Anweisung iteriert über die enumerierten String-Eigenschaften eines Objekts, während die for...of-Anweisung über die Werte iteriert, die das iterierbare Objekt definiert, um darüber iteriert zu werden.
Das folgende Beispiel zeigt den Unterschied zwischen einer for...of-Schleife und einer for...in-Schleife, wenn sie mit einem Array verwendet werden.
Das Objekt iterable erbt die Eigenschaften objCustom und arrCustom, weil es sowohl Object.prototype als auch Array.prototype in seiner Prototypenkette enthält.
Die for...in-Schleife protokolliert nur enumerierbare Eigenschaften des iterable Objekts. Sie protokolliert nicht die Array-Elemente 3, 5, 7 oder "hello", da diese keine Eigenschaften sind – sie sind Werte. Sie protokolliert Array-Indizes sowie arrCustom und objCustom, die tatsächliche Eigenschaften sind. Wenn Sie sich nicht sicher sind, warum diese Eigenschaften iteriert werden, gibt es eine ausführlichere Erklärung, wie Array-Iteration und for...in funktioniert.
Die zweite Schleife ähnelt der ersten, verwendet jedoch Object.hasOwn(), um zu überprüfen, ob die gefundene enumerierbare Eigenschaft eigene des Objekts ist, d.h. nicht geerbt. Wenn dies der Fall ist, wird die Eigenschaft protokolliert. Die Eigenschaften 0, 1, 2 und foo werden protokolliert, da sie eigene Eigenschaften sind. Die Eigenschaften arrCustom und objCustom werden nicht protokolliert, da sie geerbt sind.
Die for...of-Schleife iteriert und protokolliert Werte, die iterable, als ein Array (das iterierbar ist), definiert, um darüber zu iterieren. Die Elemente 3, 5, 7 des Objekts werden angezeigt, aber keine der Eigenschaften des Objekts.
| ECMAScript® 2027 Language Specification # sec-for-in-and-for-of-statements |
JavaScript aktivieren, um diese Browser-Kompatibilitätstabelle anzuzeigen.
Der Bauplan für ein besseres Internet.
Besuche die gemeinnützige Muttergesellschaft der Mozilla Corporation, die Mozilla Foundation.
Teile dieses Inhalts sind ©1998–2026 von einzelnen mozilla.org-Mitwirkenden. Inhalte sind verfügbar unter einer Creative-Commons-Lizenz.