Ricerca…
Sintassi
- for ( initialization ; condition ; final_expression ) {}
- for ( chiave nell'oggetto ) {}
- for ( variabile di iterable ) {}
- while ( condizione ) {}
- do {} while ( condizione )
- per ogni ( variabile nell'oggetto ) {} // ECMAScript per XML
Osservazioni
I loop in JavaScript di solito aiutano a risolvere problemi che implicano la ripetizione di codice specifico x quantità di volte. Dì che devi registrare un messaggio 5 volte. Potresti fare questo:
console.log("a message");
console.log("a message");
console.log("a message");
console.log("a message");
console.log("a message");
Ma questo è solo tempo e un po 'ridicolo. Inoltre, cosa succede se è necessario registrare oltre 300 messaggi? Dovresti sostituire il codice con un ciclo tradizionale "per":
for(var i = 0; i < 5; i++){
console.log("a message");
}
Cicli "for" standard
Utilizzo standard
for (var i = 0; i < 100; i++) {
console.log(i);
}
Uscita prevista:
0
1
...
99
Dichiarazioni multiple
Comunemente usato per memorizzare nella cache la lunghezza di un array.
var array = ['a', 'b', 'c'];
for (var i = 0; i < array.length; i++) {
console.log(array[i]);
}
Uscita prevista:
'un'
'B'
'C'
Modifica dell'incremento
for (var i = 0; i < 100; i += 2 /* Can also be: i = i + 2 */) {
console.log(i);
}
Uscita prevista:
0
2
4
...
98
Ciclo decrementato
for (var i = 100; i >=0; i--) {
console.log(i);
}
Uscita prevista:
100
99
98
...
0
"while" Loops
Standard While Loop
Un ciclo while standard verrà eseguito finché la condizione data non è falsa:
var i = 0;
while (i < 100) {
console.log(i);
i++;
}
Uscita prevista:
0
1
...
99
Ciclo decrementato
var i = 100;
while (i > 0) {
console.log(i);
i--; /* equivalent to i=i-1 */
}
Uscita prevista:
100
99
98
...
1
Do ... while Loop
Un ciclo do ... while viene sempre eseguito almeno una volta, indipendentemente dal fatto che la condizione sia vera o falsa:
var i = 101;
do {
console.log(i);
} while (i < 100);
Uscita prevista:
101
"Break" di un ciclo
Rottura di un ciclo temporale
var i = 0;
while(true) {
i++;
if(i === 42) {
break;
}
}
console.log(i);
Uscita prevista:
42
Rottura di un ciclo for
var i;
for(i = 0; i < 100; i++) {
if(i === 42) {
break;
}
}
console.log(i);
Uscita prevista:
42
"continua" un ciclo
Continuando un ciclo "per"
Quando si inserisce la parola chiave continue
in un ciclo for, l'esecuzione salta all'espressione di aggiornamento ( i++
nell'esempio):
for (var i = 0; i < 3; i++) {
if (i === 1) {
continue;
}
console.log(i);
}
Uscita prevista:
0
2
Continuare un ciclo While
Quando si continue
in un ciclo while, l'esecuzione salta alla condizione ( i < 3
nell'esempio):
var i = 0;
while (i < 3) {
if (i === 1) {
i = 2;
continue;
}
console.log(i);
i++;
}
Uscita prevista:
0
2
"do ... while" loop
var availableName;
do {
availableName = getRandomName();
} while (isNameUsed(name));
Un ciclo do while
deve essere eseguito almeno una volta poiché la sua condizione viene verificata solo alla fine di un'iterazione. Un ciclo while
tradizionale può essere eseguito zero o più volte poiché la sua condizione viene controllata all'inizio di un'iterazione.
Rompere i loop nidificati specifici
Possiamo nominare i nostri anelli e rompere quello specifico quando necessario.
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;
}
}
}
Produzione:
0
0
0
1
Interrompi e continua le etichette
Le istruzioni break e continue possono essere seguite da un'etichetta opzionale che funziona come una sorta di istruzione goto, riprende l'esecuzione dalla posizione di riferimento dell'etichetta
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 salta il resto dei valori j
1 0
i = 1 j = 1 salta il resto dei valori j
2 0
2 1 i = 2 j = 2 salta il resto dei valori j
3 0
3 1
3 2
i = 3 j = 3 salta il resto dei valori j
4 0
4 1
4 2
4 3
i = 4 j = 4 non registra e i loop sono fatti
"per ... di" ciclo
const iterable = [0, 1, 2];
for (let i of iterable) {
console.log(i);
}
Uscita prevista:
0
1
2
I vantaggi del per ... del ciclo sono:
- Questa è la sintassi più concisa e diretta per il looping degli elementi dell'array
- Evita tutte le insidie di per ... in
- A differenza di
forEach()
, funziona con break, continue e return
Supporto di ... di altre raccolte
stringhe
per ... di tratterà una stringa come una sequenza di caratteri Unicode:
const string = "abc";
for (let chr of string) {
console.log(chr);
}
Uscita prevista:
a b c
Imposta
per ... di opere su Set objects .
Nota :
- Un oggetto Set eliminerà i duplicati.
- Si prega di controllare questo riferimento per il supporto del browser
Set()
.
const names = ['bob', 'alejandro', 'zandra', 'anna', 'bob'];
const uniqueNames = new Set(names);
for (let name of uniqueNames) {
console.log(name);
}
Uscita prevista:
peso
alejandro
Zandra
Anna
Mappe
Puoi anche usare per ... dei loop per iterare su Map s. Funziona in modo simile a matrici e insiemi, ad eccezione della variabile di iterazione che memorizza sia una chiave che un valore.
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]
}
È possibile utilizzare l' assegnazione destrutturante per acquisire separatamente la chiave e il valore:
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
*/
Oggetti
per ... dei loop non funzionano direttamente su oggetti semplici; ma è possibile iterare sulle proprietà di un oggetto passando a un ciclo for ... in loop o usando Object.keys()
:
const someObject = { name: 'Mike' };
for (let key of Object.keys(someObject)) {
console.log(key + ": " + someObject[key]);
}
Uscita prevista:
nome: Mike
"per ... in" ciclo
avvertimento
per ... in è inteso per iterare su chiavi di oggetti, non su indici di array. In genere è sconsigliato l'uso del loop in un array . Comprende anche le proprietà del prototipo, quindi potrebbe essere necessario verificare se la chiave si trova all'interno dell'oggetto usandohasOwnProperty
. Se alcuni attributi nell'oggetto sono definiti dal metododefineProperty/defineProperties
e si impostaenumerable: false
paramenumerable: false
, tali attributi saranno inaccessibili.
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]);
}
}
Uscita prevista:
oggetto.b, bar
object.c, baz