| [ Web Proxy ] |
| Viewing: https://developer.mozilla.org/de/docs/Web/JavaScript/Guide/Loops_and_iteration#for...of_statement | [Back] [Original] |
Get to know MDN better
Dieser Inhalt wurde automatisch aus dem Englischen bersetzt, und kann Fehler enthalten. Erfahre mehr ber dieses Experiment.
Schleifen bieten eine schnelle und einfache Mglichkeit, etwas wiederholt zu tun. Dieses Kapitel des JavaScript-Leitfadens fhrt in die verschiedenen Iterationsanweisungen ein, die in JavaScript verfgbar sind.
Sie knnen sich eine Schleife als eine computerisierte Version des Spiels vorstellen, bei dem Sie jemandem sagen, er solle X Schritte in eine Richtung machen und dann Y Schritte in eine andere. Beispielsweise knnte die Idee "Gehen Sie fnf Schritte nach Osten" auf diese Weise als Schleife ausgedrckt werden:
for (let step = 0; step < 5; step++) {
// Runs 5 times, with values of step 0 through 4.
console.log("Walking east one step");
}
Es gibt viele verschiedene Arten von Schleifen, aber im Wesentlichen tun sie alle dasselbe: Sie wiederholen eine Aktion eine bestimmte Anzahl von Malen. (Beachten Sie, dass diese Zahl auch null sein knnte!)
Die verschiedenen Schleifenmechanismen bieten unterschiedliche Mglichkeiten, die Start- und Endpunkte der Schleife zu bestimmen. In verschiedenen Situationen ist eine bestimmte Art von Schleife mglicherweise besser geeignet als andere.
Die in JavaScript bereitgestellten Schleifenanweisungen sind:
Eine for-Schleife wird wiederholt, bis eine angegebene Bedingung als falsch ausgewertet wird. Die JavaScript-for-Schleife hnelt der Java- und C-for-Schleife.
Eine for-Anweisung sieht folgendermaen aus:
for (initialization; condition; afterthought)
statement
Wenn eine for-Schleife ausgefhrt wird, geschieht Folgendes:
initialization, sofern vorhanden, wird ausgefhrt. Dieser Ausdruck initialisiert in der Regel einen oder mehrere Schleifenzhler, aber die Syntax erlaubt einen Ausdruck beliebiger Komplexitt. Dieser Ausdruck kann auch Variablen deklarieren.condition wird ausgewertet. Wenn der Wert von condition wahr ist, werden die Schleifenanweisungen ausgefhrt. Andernfalls endet die for-Schleife. (Wenn der condition-Ausdruck vollstndig weggelassen wird, wird angenommen, dass die Bedingung wahr ist.)statement wird ausgefhrt. Um mehrere Anweisungen auszufhren, verwenden Sie eine Block-Anweisung ({ }), um diese Anweisungen zu gruppieren.afterthought ausgefhrt.Im folgenden Beispiel enthlt die Funktion eine for-Anweisung, die die Anzahl der ausgewhlten Optionen in einer Auswahlliste zhlt (ein <select>-Element, das Mehrfachauswahlen erlaubt).
<form name="selectForm">
<label for="musicTypes"
>Choose some music types, then click the button below:</label
>
<select id="musicTypes" name="musicTypes" multiple>
<option selected>R&B</option>
<option>Jazz</option>
<option>Blues</option>
<option>New Age</option>
<option>Classical</option>
<option>Opera</option>
</select>
<button id="btn" type="button">How many are selected?</button>
</form>
Hier deklariert die for-Anweisung die Variable i und initialisiert sie mit 0. Es wird berprft, ob i kleiner als die Anzahl der Optionen im <select>-Element ist, die nachfolgende if-Anweisung wird ausgefhrt, und i wird nach jedem Durchlauf der Schleife um 1 erhht.
function countSelected(selectObject) {
let numberSelected = 0;
for (let i = 0; i < selectObject.options.length; i++) {
if (selectObject.options[i].selected) {
numberSelected++;
}
}
return numberSelected;
}
const btn = document.getElementById("btn");
btn.addEventListener("click", () => {
const musicTypes = document.selectForm.musicTypes;
console.log(`You have selected ${countSelected(musicTypes)} option(s).`);
});
Die do...while-Anweisung wird wiederholt, bis eine angegebene Bedingung als falsch ausgewertet wird.
Eine do...while-Anweisung sieht folgendermaen aus:
do
statement
while (condition);
statement wird immer einmal ausgefhrt, bevor die Bedingung
berprft wird. (Um mehrere Anweisungen auszufhren, verwenden Sie eine Block-Anweisung ({ }), um diese Anweisungen zu gruppieren.)
Wenn condition wahr ist, wird die Anweisung erneut ausgefhrt. Am Ende jeder Ausfhrung wird die Bedingung berprft. Wenn die Bedingung falsch ist, stoppt die Ausfhrung und die Kontrolle wird an die Anweisung nach do...while bergeben.
Im folgenden Beispiel iteriert die do-Schleife mindestens einmal und wiederholt sich, bis i nicht mehr kleiner als 5 ist.
let i = 0;
do {
i += 1;
console.log(i);
} while (i < 5);
Eine while-Anweisung fhrt ihre Anweisungen so lange aus, wie eine angegebene Bedingung als true ausgewertet wird. Eine while-Anweisung sieht folgendermaen aus:
while (condition)
statement
Wenn die condition falsch wird, stoppt das statement innerhalb der Schleife und die Kontrolle wird an die Anweisung nach der Schleife bergeben.
Der Bedingungstest erfolgt bevor statement in der Schleife
ausgefhrt wird. Wenn die Bedingung true zurckgibt, wird statement ausgefhrt und die condition erneut geprft. Wenn die Bedingung false zurckgibt, stoppt die Ausfhrung, und die Kontrolle wird an die Anweisung nach while bergeben.
Um mehrere Anweisungen auszufhren, verwenden Sie eine Block-Anweisung ({ }), um diese Anweisungen zu gruppieren.
Die folgende while-Schleife iteriert, solange n kleiner als 3 ist:
let n = 0;
let x = 0;
while (n < 3) {
n++;
x += n;
}
Bei jedem Durchlauf erhht die Schleife n und fgt diesen Wert zu x hinzu. Daher nehmen x und n folgende Werte an:
n = 1 und x = 1n = 2 und x = 3n = 3 und x = 6Nach Abschluss des dritten Durchlaufs ist die Bedingung n < 3 nicht mehr true, sodass die Schleife beendet wird.
Vermeiden Sie Endlosschleifen. Stellen Sie sicher, dass die Bedingung in einer Schleife letztendlich false wird andernfalls wird die Schleife niemals enden! Die Anweisungen in der folgenden while-Schleife werden fr immer ausgefhrt, weil die Bedingung niemals false wird:
// Infinite loops are bad!
while (true) {
console.log("Hello, world!");
}
Eine label bietet einer Anweisung eine Kennzeichnung, mit der Sie sich an anderer Stelle im Programm darauf beziehen knnen. Beispielsweise knnen Sie ein Label verwenden, um eine Schleife zu identifizieren, und dann die break- oder continue-Anweisungen verwenden, um anzugeben, ob ein Programm die Schleife unterbrechen oder fortsetzen soll.
Die Syntax der labeled-Anweisung sieht folgendermaen aus:
label:
statement
Der Wert von label kann jeder JavaScript-Bezeichner sein, der kein reserviertes Wort ist. Die statement, die Sie mit einem Label identifizieren, kann eine beliebige Anweisung sein. Fr Beispiele zur Verwendung von labeled-Anweisungen siehe die Beispiele von break und continue unten.
Verwenden Sie die break-Anweisung, um eine Schleife, switch oder in Verbindung mit einer labeled-Anweisung zu beenden.
break ohne Label verwenden, wird die unmittelbar umschlossene while, do-while, for oder switch sofort beendet und die Kontrolle geht zur folgenden Anweisung ber.break mit einem Label verwenden, wird die angegebene labeled-Anweisung beendet.Die Syntax der break-Anweisung sieht folgendermaen aus:
break;
break label;
switch.Das folgende Beispiel iteriert durch die Elemente eines Arrays, bis es den Index eines Elements mit dem Wert theValue findet:
for (let i = 0; i < a.length; i++) {
if (a[i] === theValue) {
break;
}
}
let x = 0;
let z = 0;
labelCancelLoops: while (true) {
console.log("Outer loops:", x);
x += 1;
z = 1;
while (true) {
console.log("Inner loops:", z);
z += 1;
if (z === 10 && x === 10) {
break labelCancelLoops;
} else if (z === 10) {
break;
}
}
}
Die continue-Anweisung kann verwendet werden, um eine while, do-while, for oder label-Anweisung neu zu starten.
continue ohne Label verwenden, wird die aktuelle Iteration der unmittelbar umschlossenen while, do-while oder for-Anweisung beendet und die Ausfhrung der Schleife mit der nchsten Iteration fortgesetzt. Im Gegensatz zur break-Anweisung beendet continue nicht die Ausfhrung der Schleife vollstndig. In einer while-Schleife springt es zurck zur Bedingung. In einer for-Schleife springt es zum increment-expression.continue mit einem Label verwenden, bezieht es sich auf die Schleifenanweisung mit diesem Label.Die Syntax der continue-Anweisung sieht folgendermaen aus:
continue;
continue label;
Das folgende Beispiel zeigt eine while-Schleife mit einer continue-Anweisung, die ausgefhrt wird, wenn der Wert von i 3 ist. So nimmt n die Werte 1, 3, 7 und 12 an.
let i = 0;
let n = 0;
while (i < 5) {
i++;
if (i === 3) {
continue;
}
n += i;
console.log(n);
}
// Logs:
// 1 3 7 12
Wenn Sie continue; auskommentieren, wrde die Schleife bis zum Ende laufen und Sie wrden 1,3,6,10,15 sehen.
Eine Anweisung mit dem Label checkIandJ enthlt eine Anweisung mit dem Label checkJ. Wenn continue aufgerufen wird, beendet das Programm die aktuelle Iteration von checkJ und beginnt die nchste Iteration. Jedes Mal, wenn continue aufgerufen wird, wird checkJ erneut durchlaufen, bis seine Bedingung false zurckgibt. Wenn false zurckgegeben wird, wird der Rest der checkIandJ-Anweisung abgeschlossen, und checkIandJ wird erneut durchlaufen, bis seine Bedingung false zurckgibt. Wenn false zurckgegeben wird, wird das Programm bei der Anweisung nach checkIandJ fortgesetzt.
Wenn continue ein Label von checkIandJ htte, wrde das Programm am Anfang der checkIandJ-Anweisung fortfahren.
let i = 0;
let j = 10;
checkIandJ: while (i < 4) {
console.log(i);
i += 1;
checkJ: while (j > 4) {
console.log(j);
j -= 1;
if (j % 2 === 0) {
continue;
}
console.log(j, "is odd.");
}
console.log("i =", i);
console.log("j =", j);
}
Die for...in-Anweisung iteriert eine angegebene Variable ber alle aufzhlbaren Eigenschaften eines Objekts. Fr jede eindeutige Eigenschaft fhrt JavaScript die angegebenen Anweisungen aus. Eine for...in-Anweisung sieht folgendermaen aus:
for (variable in object)
statement
Die folgende Funktion nimmt als Argument ein Objekt und den Namen des Objekts. Sie iteriert dann ber alle Eigenschaften des Objekts und gibt einen String zurck, der die Eigenschaftsnamen und ihre Werte auflistet.
function dumpProps(obj, objName) {
let result = "";
for (const i in obj) {
result += `${objName}.${i} = ${obj[i]}<br>`;
}
result += "<hr>";
return result;
}
Fr ein Objekt car mit den Eigenschaften make und model wre result:
car.make = Ford car.model = Mustang
Obwohl es verlockend sein mag, dies als eine Mglichkeit zu verwenden, um ber Array-Elemente zu iterieren, wird die for...in-Anweisung die Namen Ihrer benutzerdefinierten Eigenschaften zustzlich zu den numerischen Indizes zurckgeben.
Daher ist es besser, eine traditionelle for-Schleife mit einem numerischen Index zu verwenden, wenn Sie ber Arrays iterieren, da die for...in-Anweisung ber benutzerdefinierte Eigenschaften zustzlich zu den Array-Elementen iteriert, wenn Sie das Array-Objekt modifizieren (z.B. durch Hinzufgen von benutzerdefinierten Eigenschaften oder Methoden).
Die for...of-Anweisung erstellt eine Schleife, die ber iterierbare Objekte (einschlielich Array, Map, Set, arguments-Objekt und so weiter) iteriert, und einen benutzerdefinierten Iterations-Hook mit Anweisungen aufruft, die fr den Wert jeder eindeutigen Eigenschaft ausgefhrt werden sollen.
for (variable of iterable)
statement
Das folgende Beispiel zeigt den Unterschied zwischen einer for...of-Schleife und einer for...in-Schleife. Whrend for...in ber Eigenschaftsnamen iteriert, iteriert for...of ber Eigenschaftswerte:
const arr = [3, 5, 7];
arr.foo = "hello";
for (const i in arr) {
console.log(i);
}
// "0" "1" "2" "foo"
for (const i of arr) {
console.log(i);
}
// Logs: 3 5 7
Die for...of und for...in-Anweisungen knnen auch mit Destrukturierung verwendet werden. Zum Beispiel knnen Sie gleichzeitig ber die Schlssel und Werte eines Objekts mit Object.entries() iterieren.
const obj = { foo: 1, bar: 2 };
for (const [key, val] of Object.entries(obj)) {
console.log(key, val);
}
// "foo" 1
// "bar" 2
Der Bauplan fr ein besseres Internet.
Teile dieses Inhalts sind 19982026 von einzelnen mozilla.org-Mitwirkenden. Inhalte sind verfgbar unter einer Creative-Commons-Lizenz.
| Web Proxy Viewer | New URL | Original Page |