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