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
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 :
- Ein Set-Objekt entfernt Duplikate.
- Bitte überprüfen Sie diese Referenz für die
Set()
Browserunterstützung.
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 vonhasOwnProperty
zu überprüfen, ob sich der Schlüssel innerhalb des ObjektshasOwnProperty
. Wenn Attribute im Objekt von derdefineProperty/defineProperties
Methode definiert werden und der Parameterenumerable: 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