Suche…


Syntax

  • for ( Initialisierung ; Bedingung ; final_expression ) {}
  • für ( Schlüssel in Objekt ) {}
  • for ( Variable von iterable ) {}
  • while ( Bedingung ) {}
  • {} while ( Bedingung )
  • für jede ( Variable im Objekt ) {} // ECMAScript für XML

Bemerkungen

Schleifen in JavaScript helfen in der Regel bei der Lösung von Problemen, bei denen bestimmter Code x- mal wiederholt wird. Angenommen, Sie müssen eine Nachricht fünfmal protokollieren. Sie könnten das tun:

console.log("a message");
console.log("a message");
console.log("a message");
console.log("a message");
console.log("a message");

Das ist aber nur zeitaufwändig und irgendwie lächerlich. Was wäre, wenn Sie mehr als 300 Nachrichten protokollieren müssten? Sie sollten den Code durch eine herkömmliche "for" -Schleife ersetzen:

for(var i = 0; i < 5; i++){
    console.log("a message");
}

Standard "für" Schleifen

Standardgebrauch

for (var i = 0; i < 100; i++) {
    console.log(i);
}

Erwartete Ausgabe:

0
1
...
99

Mehrere Deklarationen

Wird üblicherweise zum Zwischenspeichern der Länge eines Arrays verwendet

var array = ['a', 'b', 'c'];
for (var i = 0; i < array.length; i++) {
    console.log(array[i]);
}

Erwartete Ausgabe:

'ein'
'b'
'c'

Inkrement ändern

for (var i = 0; i < 100; i += 2 /* Can also be: i = i + 2 */) {
    console.log(i);
}

Erwartete Ausgabe:

0
2
4
...
98

Dekrementierte Schleife

for (var i = 100; i >=0; i--) {
    console.log(i);
}

Erwartete Ausgabe:

100
99
98
...
0

"while" Loops

Standard While-Schleife

Eine standardmäßige while-Schleife wird ausgeführt, bis die angegebene Bedingung falsch ist:

var i = 0;
while (i < 100) {
    console.log(i);
    i++;
}

Erwartete Ausgabe:

0
1
...
99

Dekrementierte Schleife

var i = 100;
while (i > 0) {
    console.log(i);
    i--; /* equivalent to i=i-1 */
}

Erwartete Ausgabe:

100
99
98
...
1

Mach ... während der Schleife

Eine do ... while-Schleife wird immer mindestens einmal ausgeführt, unabhängig davon, ob die Bedingung wahr oder falsch ist:

var i = 101;
do {
    console.log(i);
} while (i < 100);

Erwartete Ausgabe:

101

"Break" aus einer Schleife

Ausbruch einer While-Schleife

var i = 0;
while(true) {
    i++;
    if(i === 42) {
        break;
    }
}
console.log(i);

Erwartete Ausgabe:

42

Ausbruch einer for-Schleife

var i;
for(i = 0; i < 100; i++) {
    if(i === 42) {
        break;
    }
}
console.log(i);

Erwartete Ausgabe:

42

"weiter" eine Schleife

Fortsetzung einer "for" -Schleife

Wenn Sie das Schlüsselwort continue in eine for-Schleife einfügen, springt die Ausführung zum Aktualisierungsausdruck ( i++ im Beispiel):

for (var i = 0; i < 3; i++) {
    if (i === 1) {
        continue;
    }
    console.log(i);
}

Erwartete Ausgabe:

0
2

Fortsetzung einer While-Schleife

Wenn Sie in einer while-Schleife continue , springt die Ausführung zur Bedingung ( i < 3 im Beispiel):

var i = 0;
while (i < 3) {
    if (i === 1) {
        i = 2;
        continue;
    }
    console.log(i);
    i++;
}

Erwartete Ausgabe:

0
2

"do ... while" -Schleife

var availableName;
do {
    availableName = getRandomName();
} while (isNameUsed(name));

Eine do while Schleife wird garantiert mindestens einmal ausgeführt, da der Zustand nur am Ende einer Iteration überprüft wird. Eine traditionelle while Schleife kann null oder mehrmals ausgeführt werden, wenn ihre Bedingung zu Beginn einer Iteration überprüft wird.

Bestimmte verschachtelte Schleifen brechen

Wir können unsere Schleifen benennen und bei Bedarf die spezifische brechen.

outerloop:
for (var i = 0;i<3;i++){
    innerloup:
    for (var j = 0;j <3; j++){
        console.log(i);
        console.log(j);
        if (j == 1){
            break outerloop;    
        }
    }
}

Ausgabe:

0
0
0
1

Etiketten brechen und fortfahren

Auf die Anweisungen break und continue kann eine optionale Beschriftung folgen, die wie eine goto-Anweisung funktioniert und die Ausführung von der Position, auf die die Beschriftung verweist, fortsetzt

for(var i = 0; i < 5; i++){
  nextLoop2Iteration:
  for(var j = 0; j < 5; j++){
    if(i == j) break nextLoop2Iteration;
    console.log(i, j);
  }
}

i = 0 j = 0 überspringt den Rest von j-Werten
1 0
i = 1 j = 1 überspringt den Rest von j-Werten
2 0
2 1 i = 2 j = 2 überspringt den Rest der j-Werte
3 0
3 1
3 2
i = 3 j = 3 überspringt den Rest der j-Werte
4 0
4 1
4 2
4 3
i = 4 j = 4 protokolliert nicht und es werden Schleifen ausgeführt

"for ... of" -Schleife

6
const iterable = [0, 1, 2];
for (let i of iterable) {
    console.log(i);
}

Erwartete Ausgabe:

0
1
2

Die Vorteile der for ... of-Schleife sind:

  • Dies ist die präziseste, direkte Syntax, die bisher für das Durchlaufen von Array-Elementen verwendet wurde
  • Es vermeidet alle Fallstricke von ... in
  • Im Gegensatz zu forEach() funktioniert es mit break, continue und return

Unterstützung von für ... in anderen Sammlungen

Zeichenketten

for ... of behandelt eine Zeichenfolge als eine Folge von Unicode-Zeichen:

const string = "abc";
for (let chr of string) {
  console.log(chr);
}

Erwartete Ausgabe:

a b c

Sets

für ... Arbeiten an Set-Objekten .

Hinweis :

const names = ['bob', 'alejandro', 'zandra', 'anna', 'bob'];

const uniqueNames = new Set(names);

for (let name of uniqueNames) {
  console.log(name);
}

Erwartete Ausgabe:

Bob
Alejandro
Zandra
Anna

Karten

Sie können auch für ... von Schleifen verwenden, um über Map s zu iterieren. Dies funktioniert ähnlich wie bei Arrays und Sets, außer dass die Iterationsvariable sowohl einen Schlüssel als auch einen Wert speichert.

const map = new Map()
  .set('abc', 1)
  .set('def', 2)

for (const iteration of map) {
  console.log(iteration) //will log ['abc', 1] and then ['def', 2]
}

Sie können die Destrukturierungszuordnung verwenden , um den Schlüssel und den Wert getrennt zu erfassen:

const map = new Map()
  .set('abc', 1)
  .set('def', 2)

for (const [key, value] of map) {
  console.log(key + ' is mapped to ' + value)
}
/*Logs:
  abc is mapped to 1
  def is mapped to 2
*/

Objekte

denn ... von Schleifen funktionieren nicht direkt an einfachen Objekten; Es ist jedoch möglich, die Eigenschaften eines Objekts zu Object.keys() , indem Object.keys() zu einer for ... in-Schleife Object.keys() oder Object.keys() :

const someObject = { name: 'Mike' };

for (let key of Object.keys(someObject)) {
  console.log(key + ": " + someObject[key]);
}

Erwartete Ausgabe:

Name: Mike

"for ... in" -Schleife

Warnung
for ... in ist für das Durchlaufen von Objektschlüsseln gedacht, nicht für Array-Indizes. Es wird generell davon abgeraten, ein Array durchzugehen . Es enthält auch Eigenschaften des Prototyps. hasOwnProperty kann es erforderlich sein, mithilfe von hasOwnProperty zu überprüfen, ob sich der Schlüssel innerhalb des Objekts hasOwnProperty . Wenn Attribute im Objekt von der defineProperty/defineProperties Methode definiert werden und der Parameter enumerable: false , sind diese Attribute nicht zugänglich.

var object = {"a":"foo", "b":"bar", "c":"baz"};
// `a` is inaccessible
Object.defineProperty(object , 'a', {
        enumerable: false,
});
for (var key in object) {
    if (object.hasOwnProperty(key)) {
      console.log('object.' + key + ', ' + object[key]);
    }
}

Erwartete Ausgabe:

object.b, bar
object.c, baz



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow