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
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 methasOwnProperty
. Als kenmerken in het object worden gedefinieerd door de methodedefineProperty/defineProperties
en de parameterenumerable: 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