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

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

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 usando hasOwnProperty . Se alcuni attributi nell'oggetto sono definiti dal metodo defineProperty/defineProperties e si imposta enumerable: false param enumerable: 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



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow