JavaScript Basic - smyčky, smyčka for, for in, for of, forEach, while...

Smyčky

Smyčky vyhodnotí podmínku. True výraz spustí blok kódu. Smyčky opakují proces, dokud výraz není nepravdivý .

pro smyčku

smyčka for je nejběžněji používaná smyčka.

Syntaxe

for(initialisation; condition; update) {
  // body
  // code block to be ran
}

Naučme se význam těchto částí na příkladu. Smyčka níže spouští console.log(i) pro i od 0 do (ale nezahrnuje) 5:

for (let i = 0; i < 5; i++) { 
  // shows 0, then 1, then 2, then 3, then 4
  console.log(i)
}

Podívejme se na výše uvedený kód část po části.
inicializace => nechť i =0
:Toto se provede jednou po vstupu do smyčky.
stav => i <5
:Kontrolováno před každou iterací smyčky. Pokud je nepravda, smyčka se zastaví.
body (blok kódu, který má být spuštěn) => console.log(i)
:Běží znovu a znovu, dokud je podmínka pravdivá.
aktualizace (krok) => i++
:Spustí se po těle při každé iteraci.

Inline deklarace proměnné

Proměnná i je deklarována přímo ve smyčce. To se nazývá *„inline“ proměnná * prohlášení. Takové proměnné jsou viditelné pouze uvnitř smyčky .

for (let i = 0; i < 3; i++) {
  console.log(i); // 0, 1, 2
}
console.log(i); // error, no such variable
let i = 0;

for (i = 0; i < 3; i++) { // use an existing variable
  console.log(i); // 0, 1, 2
}
console.log(i); // 3, visible, because declared outside of the loop

Přeskakování částí

Jakoukoli část for lze přeskočit.
Začátek můžeme například vynechat, pokud na začátku smyčky nepotřebujeme nic dělat.

let i = 0; // we have i already declared and assigned
for (; i < 3; i++) { 
  // no need for "initialisation(begin)" so it can be done with ';'
  console.log(i); // 0, 1, 2
}

update(step) lze také vynechat.

let i = 0;
for (; i < 3;) {
  console.log( i++ );
}
// this makes the loop identical to while (i < 3).

pro in

Syntaxe

for (key in object) {
  // code block to be executed
}

protože příkaz in může také zacyklit (interates) přes vlastnosti pole:

let array = [10, 20, 30, 40, 50];

for (let index in array) {
  console.log(array[index], index);
}

protože v příkazu prochází (iteruje) vlastnosti objektu.

const object = { a: 1, b: 2, c: 3 };

for (const property in object) {
  console.log(`${property}: ${object[property]}`);
}

pro z

Příkaz for...of vytváří smyčku iterující přes iterovatelné objekty, včetně:vestavěných objektů String, Array, objektů podobných poli.

let array = [10, 20, 30, 40, 50];

for (let value of array) {
  console.log(value);
}

zatímco

Syntaxe

while(expression) {
  //statement to execute
}

I když je podmínka pravdivá , spustí se kód z těla smyčky .
Například smyčka pod výstupem dává skóre, zatímco skóre <5

let score = 0;
while(score < 5) {
  console.log(score);
  score++;
}
// 0
// 1
// 2
// 3
// 4
// it runs while score < 5 is true and then exit the loop.


Dokud je výraz pravdivý, bude vstupovat do bloku kódu znovu a znovu. Tato smyčka poběží, dokud je výraz pravdivý.

Jedno provedení těla smyčky se nazývá iterace . Smyčka ve výše uvedeném příkladu dělá pět iterací.
Pokud by ve výše uvedeném příkladu chybělo i++, smyčka by se opakovala (teoreticky) navždy (nekonečně), protože i je 0 a nikdy nebude větší než 5, protože se nezvyšuje.
Jakýkoli výraz nebo proměnná může být podmínkou cyklu, nejen porovnání:podmínka je vyhodnocena a převedena na booleovskou hodnotu while .

let i = 5;
while (i) { // when i becomes 0, the condition becomes falsy, and the loop stops
  alert( i );
  i--;
}

dělat, zatímco

Syntaxe

do {
  // loop body
} while (condition);

Cyklus nejprve provede tělo, poté zkontroluje podmínku, a pokud je pravdivá, provede ji znovu a znovu.

let i = 0;
do {
  alert( i );
  i++;
} while (i < 3);

Tato forma syntaxe by měla být použita pouze v případě, že chcete, aby se tělo smyčky provedlo alespoň jednou bez ohledu na to, zda je podmínka pravdivá. (Obvykle je preferována jiná forma, kterou je while smyčka)

let value = 5;
do {
  console.log(value);
  value++;
} while(value < 3);
// this is false. because the value = 5 but it tells you to iterate while(value < 3). However, it will still print 5(because of do { console.log(value); }) and when it checks the condition - while(value < 3), it will exit the loop.

pro každého

let todos = ["clean room", "make lunch", "walk my dog", "study JS",]
todos.forEach(function(todo, i) {
  console.log(todo, i);
})

Výše uvedený kód je stejný jako tento kód využívající smyčku for

for(let i=0; i < todos.length; i++) {
  console.log(todos[i], i);
}

přestávka

Přerušení smyčky
Za normálních okolností se smyčka ukončí, když se její stav stane chybným, ale můžeme vynutit ukončení kdykoli pomocí speciální přestávky směrnice.
Například smyčka níže žádá uživatele o řadu čísel, která se „přeruší“, když není zadáno žádné číslo

let sum = 0;

while (true) {
  let value = +prompt("Enter a number", '');
  if (!value) break; // if the user enters an empty line or cancels the input. It stops the loop immediately, passing control to the first line after the loop.
  sum += value;
}
alert('Sum: ' + sum);

pokračovat

Direktiva continue je „lehčí verzí“ break. Celou smyčku to nezastaví . Místo toho zastaví aktuální iteraci a vynutí smyčku, aby začala novou (pokud to podmínky dovolí).
Můžeme ji použít, pokud jsme s aktuální iterací hotovi a chtěli bychom přejít k další.

// The loop below uses continue to output only odd values.
for (let i = 0; i < 10; i++) {
  // if true, skip the remaining part of the body (so it doesn't console.log if it's even number)
  if (i % 2 == 0) continue;
  console.log(i); // 1, then 3, 5, 7, 9 (only console.log odd numbers)
}