Zoeken…


Syntaxis

  • voor ( initialisatie ; voorwaarde ; laatste_uitdrukking ) {}
  • voor ( sleutel in object ) {}
  • voor ( variabele van iterabel ) {}
  • terwijl ( staat ) {}
  • do {} while ( staat )
  • voor elke ( variabele in object ) {} // ECMAScript voor XML

Opmerkingen

Lussen in JavaScript helpen meestal bij het oplossen van problemen waarbij bepaalde code x keer wordt herhaald. Stel dat u 5 keer een bericht moet loggen. Je zou dit kunnen doen:

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

Maar dat is gewoon tijdrovend en een beetje belachelijk. Plus, wat als u meer dan 300 berichten moest loggen? U moet de code vervangen door een traditionele "for" -lus:

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

Standaard "voor" lussen

Standaard gebruik

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

Verwachte resultaten:

0
1
...
99

Meerdere verklaringen

Wordt meestal gebruikt om de lengte van een array te cachen.

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

Verwachte resultaten:

'een'
'B'
'C'

De toename wijzigen

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

Verwachte resultaten:

0
2
4
...
98

Afgenomen lus

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

Verwachte resultaten:

100
99
98
...
0

"terwijl" Loops

Standaard While Loop

Een standaard while-lus wordt uitgevoerd totdat de gegeven voorwaarde onwaar is:

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

Verwachte resultaten:

0
1
...
99

Afgenomen lus

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

Verwachte resultaten:

100
99
98
...
1

Doe ... terwijl Loop

Een doe ... while-lus wordt altijd minstens één keer uitgevoerd, ongeacht of de voorwaarde waar of onwaar is:

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

Verwachte resultaten:

101

"Breek" uit een lus

Uitbreken van een while-lus

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

Verwachte resultaten:

42

Uit een for-lus komen

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

Verwachte resultaten:

42

"loop" een lus

Een "voor" -lus voortzetten

Wanneer u het sleutelwoord continue in een for-lus plaatst, springt de uitvoering naar de update-expressie ( i++ in het voorbeeld):

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

Verwachte resultaten:

0
2

Doorgaan met een While-lus

Wanneer u in een while-lus continue , springt de uitvoering naar de voorwaarde ( i < 3 in het voorbeeld):

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

Verwachte resultaten:

0
2

"doe ... terwijl" lus

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

Een do while lus wordt gegarandeerd minstens één keer uitgevoerd, omdat de toestand ervan alleen aan het einde van een iteratie wordt gecontroleerd. Een traditionele while lus kan nul of meer keer worden uitgevoerd als de toestand ervan wordt gecontroleerd aan het begin van een iteratie.

Breek specifieke geneste lussen

We kunnen onze loops een naam geven en de specifieke breken indien nodig.

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

Output:

0
0
0
1

Breek en ga door met labels

Break- en continue-instructies kunnen worden gevolgd door een optioneel label dat werkt als een soort van goto-instructie, die de uitvoering hervat vanaf de positie waarnaar het label verwijst

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 slaat de rest van j-waarden over
1 0
i = 1 j = 1 slaat de rest van j-waarden over
2 0
2 1 i = 2 j = 2 slaat de rest van j-waarden over
3 0
3 1
3 2
i = 3 j = 3 slaat de rest van j-waarden over
4 0
4 1
4 2
4 3
i = 4 j = 4 registreert niet en loops zijn voltooid

"voor ... van" lus

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

Verwachte resultaten:

0
1
2

De voordelen van de for ... of loop zijn:

  • Dit is de meest beknopte, directe syntaxis tot nu toe voor het doorlopen van array-elementen
  • Het vermijdt alle valkuilen van voor ... in
  • In tegenstelling tot forEach() werkt het met breken, doorgaan en terugkeren

Ondersteuning van voor ... of in andere collecties

strings

want ... of zal een string behandelen als een reeks Unicode-tekens:

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

Verwachte resultaten:

a b c

sets

voor ... van werken aan Set-objecten .

Opmerking :

  • Een Set-object elimineert duplicaten.
  • Controleer deze referentie voor ondersteuning van Set() browser.
const names = ['bob', 'alejandro', 'zandra', 'anna', 'bob'];

const uniqueNames = new Set(names);

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

Verwachte resultaten:

bob
alejandro
Zandra
anna

Kaarten

Je kunt ook gebruiken voor ... van lussen om over kaarten te itereren. Dit werkt op dezelfde manier als arrays en sets, behalve dat de iteratievariabele zowel een sleutel als een waarde opslaat.

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]
}

U kunt de destructureringsopdracht gebruiken om de sleutel en de waarde afzonderlijk vast te leggen:

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
*/

Voorwerpen

voor ... van lussen werken niet rechtstreeks op gewone objecten; maar het is mogelijk om de eigenschappen van een object te herhalen door te schakelen naar een for ... in loop of door Object.keys() :

const someObject = { name: 'Mike' };

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

Verwachte resultaten:

naam: Mike

"voor ... in" lus

Waarschuwing
voor ... in is bedoeld voor het herhalen van objectsleutels, niet van array-indexen. Het wordt over het algemeen afgeraden om het door een array te laten lopen . Het bevat ook eigenschappen van het prototype, dus het kan nodig zijn om te controleren of de sleutel zich in het object bevindt met hasOwnProperty . Als kenmerken in het object worden gedefinieerd door de methode defineProperty/defineProperties en de parameter enumerable: false , zijn die kenmerken niet toegankelijk.

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

Verwachte resultaten:

object.b, balk
object.c, baz



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow