[ Web Proxy ]
URL:
Viewing: https://developer.mozilla.org/de/docs/Web/JavaScript/Guide/Loops_and_iteration#for...in_statement [Back]  [Original]

Schleifen und Iteration - JavaScript | MDN

Dieser Inhalt wurde automatisch aus dem Englischen bersetzt, und kann Fehler enthalten. Erfahre mehr ber dieses Experiment.

View in English Always switch to English

Schleifen und Iteration

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:

js
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:

In diesem Artikel

for-Anweisung

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:

js
for (initialization; condition; afterthought)
  statement

Wenn eine for-Schleife ausgefhrt wird, geschieht Folgendes:

  1. Der initialisierende Ausdruck 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.
  2. Der Ausdruck 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.)
  3. Die statement wird ausgefhrt. Um mehrere Anweisungen auszufhren, verwenden Sie eine Block-Anweisung ({ }), um diese Anweisungen zu gruppieren.
  4. Wenn vorhanden, wird der Aktualisierungsausdruck afterthought ausgefhrt.
  5. Die Kontrolle kehrt zu Schritt 2 zurck.

Beispiel

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).

HTML

html
<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&amp;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>

JavaScript

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.

js
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).`);
});

do...while-Anweisung

Die do...while-Anweisung wird wiederholt, bis eine angegebene Bedingung als falsch ausgewertet wird.

Eine do...while-Anweisung sieht folgendermaen aus:

js
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.

Beispiel

Im folgenden Beispiel iteriert die do-Schleife mindestens einmal und wiederholt sich, bis i nicht mehr kleiner als 5 ist.

js
let i = 0;
do {
  i += 1;
  console.log(i);
} while (i < 5);

while-Anweisung

Eine while-Anweisung fhrt ihre Anweisungen so lange aus, wie eine angegebene Bedingung als true ausgewertet wird. Eine while-Anweisung sieht folgendermaen aus:

js
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.

Beispiel 1

Die folgende while-Schleife iteriert, solange n kleiner als 3 ist:

js
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:

  • Nach dem ersten Durchlauf: n = 1 und x = 1
  • Nach dem zweiten Durchlauf: n = 2 und x = 3
  • Nach dem dritten Durchlauf: n = 3 und x = 6

Nach Abschluss des dritten Durchlaufs ist die Bedingung n < 3 nicht mehr true, sodass die Schleife beendet wird.

Beispiel 2

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:

js
// Infinite loops are bad!
while (true) {
  console.log("Hello, world!");
}

labeled-Anweisung

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:

js
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.

break-Anweisung

Verwenden Sie die break-Anweisung, um eine Schleife, switch oder in Verbindung mit einer labeled-Anweisung zu beenden.

  • Wenn Sie break ohne Label verwenden, wird die unmittelbar umschlossene while, do-while, for oder switch sofort beendet und die Kontrolle geht zur folgenden Anweisung ber.
  • Wenn Sie break mit einem Label verwenden, wird die angegebene labeled-Anweisung beendet.

Die Syntax der break-Anweisung sieht folgendermaen aus:

js
break;
break label;
  1. Die erste Form der Syntax beendet die unmittelbar umschlossene Schleife oder switch.
  2. Die zweite Form der Syntax beendet die angegebene umschlossene labeled-Anweisung.

Beispiel 1

Das folgende Beispiel iteriert durch die Elemente eines Arrays, bis es den Index eines Elements mit dem Wert theValue findet:

js
for (let i = 0; i < a.length; i++) {
  if (a[i] === theValue) {
    break;
  }
}

Beispiel 2: Abbruch zu einem Label

js
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;
    }
  }
}

continue-Anweisung

Die continue-Anweisung kann verwendet werden, um eine while, do-while, for oder label-Anweisung neu zu starten.

  • Wenn Sie 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.
  • Wenn Sie continue mit einem Label verwenden, bezieht es sich auf die Schleifenanweisung mit diesem Label.

Die Syntax der continue-Anweisung sieht folgendermaen aus:

js
continue;
continue label;

Beispiel 1

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.

js
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.

Beispiel 2

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.

js
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);
}

for...in-Anweisung

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:

js
for (variable in object)
  statement

Beispiel

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.

js
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

Arrays

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).

for...of-Anweisung

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.

js
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:

js
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.

js
const obj = { foo: 1, bar: 2 };

for (const [key, val] of Object.entries(obj)) {
  console.log(key, val);
}
// "foo" 1
// "bar" 2

Web Proxy Viewer  |  New URL  |  Original Page