Structuri de control
Blocuri
Pentru a grupa mai multe afirmații într-un bloc, le îmbrăcăm cu acolade:
{
statement1;
statement2;
// ...
}
Vom folosi aceste blocuri pentru structurile de control și bucle.
Atenție, doar let
și const
au durata de viață (scope) într-un bloc, var
va trăi în interiorul funcției.
if ... else
Vom folosi if
pentru a executa o afirmație doar dacă o condiție este truthy. Opțional, putem continua cu else
pentru a executa o altă afirmație când condiția precedentă e falsy:
if (condition) {
statement1;
} else {
statement2;
}
Atenție, cu toate că după if ()
poate urma atât o singură expresie cât și un bloc, se recomandă mereu să se folosească blocuri (scriem în acolade după if).
Putem crea o secvență de if ... else:
if (condition1) {
statement1;
} else if (condition2) {
statement2;
} else if (conditionN) {
statementN;
} else {
statementLast;
}
astfel, se vor verifica condițiile până una din ele este truthy, și se va executa blocul corespunzător de afirmații.
Atenție, din cauză că putem folosi orice operator (sau funcție) în condiție, poate fi confuz dacă vom folosi atribuirea acolo, care mereu va întoarce ca și rezultat valoarea din dreapta. De aceea se recomandă să delimităm prin paranteze atunci când intenționăm să facem aceasta:
if (x = y) { /* .... */ } // nu se recomandă (e un typo sau nu??)
if ((x = y)) { /* .... */ } // se recomandă, se înțelege clar intenția
if ... else
poate fi scris și cu operatorul terțar ?:
, de exemplu:
let sign
if (x > 0) {
sign = 'plus';
} else {
sign = 'minus';
}
poate fi rescris:
const sign = x > 0 ? 'plus' : 'minus';
switch
Folosind un switch
putem evalua o expresie, iar valoarea returnată să o comparăm cu diferite etichete pentru a rula afirmația asociată. Sintaxa:
switch (expression) {
case label1:
statements1
[break;]
case label2:
statements2
[break;]
...
default:
statementsDef
[break]
}
putem observa pe break
care este opțional și deobicei se adaugă la sfârșitul fiecărui case
. Acest break va opri switch
-ul, altfel, s-ar fi executat codul în continuare fără a se mai verifica case
-ul. Exemplu:
switch (getCurentLang()) {
case 'en':
console.log('Welcome');
break;
case 'ro':
console.log('Bună');
break;
default:
console.log('Bonjour');
}
În această formă, un switch
este un lanț de if ... else
, dar scris mai compact.
// un switch scris cu if ... else
const check = 1;
if (check === 1 || check === 3) {
document.write('impar');
} else if (check === 2) {
document.write(2);
} else if (check === 4) {
document.write(4);
} else {
document.write('else');
}
// rescris cu switch
switch (check) {
case 1:
case 3:
document.write('impar');
break;
case 2:
document.write(2);
break;
case 4:
document.write(4);
break;
default:
document.write('else');
}