Une instruction switch peut remplacer plusieurs vérification if.
Cela donne un moyen plus descriptif de comparer une valeur avec plusieurs variantes.
La syntaxe
Le switch a un ou plusieurs blocs case (cas) et une valeur par défaut facultative.
Cela ressemble à ceci :
switch(x) {
case 'value1': // si (x === 'value1')
...
[break]
case 'value2': // si (x === 'value2')
...
[break]
default:
...
[break]
}
- La valeur de
xest vérifiée pour une égalité stricte avec la valeur du premiercase(câest-à -dire,value1), puis du second (value2) et ainsi de suite. - Si lâégalité est trouvée,
switchcommence à exécuter le code à partir ducasecorrespondant, jusquâau prochainbreak(ou jusquâà la fin du switch). - Si aucun cas ne correspond, le code par défaut (
default) est exécuté (sâil existe).
Un exemple
Un exemple de switch (le code exécuté est mis en évidence) :
let a = 2 + 2;
switch (a) {
case 3:
alert( 'Too small' );
break;
case 4:
alert( 'Exactly!' );
break;
case 5:
alert( 'Too big' );
break;
default:
alert( "I don't know such values" );
}
Ici, le switch commence à comparer a avec le premier case dont la valeur est 3. La correspondance échoue.
Ensuite 4, câest une correspondance. Lâexécution commence donc à partir du case 4 jusquâau prochain break.
Sâil nây a pas de break, lâexécution continue avec le case suivant sans aucun contrôle.
Un exemple sans break:
let a = 2 + 2;
switch (a) {
case 3:
alert( 'Too small' );
case 4:
alert( 'Exactly!' );
case 5:
alert( 'Too big' );
default:
alert( "I don't know such values" );
}
Dans lâexemple ci-dessus, nous verrons lâexécution séquentielle de trois alert :
alert( 'Exactly!' );
alert( 'Too big' );
alert( "I don't know such values" );
switch/caseSwitch et case permettent des expressions arbitraires.
Par exemple :
let a = "1";
let b = 0;
switch (+a) {
case b + 1:
alert("this runs, because +a is 1, exactly equals b+1");
break;
default:
alert("this doesn't run");
}
Ici +a donne 1, qui est comparé à b + 1 dans le case, et le code correspondant est exécuté.
Groupement de âcaseâ
Plusieurs variantes de case partageant le même code peuvent être regroupées.
Par exemple, si nous voulons que le même code soit exécuté pour les case 3 et case 5 :
let a = 2 + 2;
switch (a) {
case 4:
alert('Right!');
break;
case 3: // (*) grouped two cases
case 5:
alert('Wrong!');
alert("Why don't you take a math class?");
break;
default:
alert('The result is strange. Really.');
}
Maintenant, les 3 et 5 affichent le même message.
La possibilité de âgrouperâ les case est un effet secondaire de la façon dont le switch/case fonctionne sans break. Ici, lâexécution du case 3 commence à partir de la ligne (*) et passe par le case 5, car il nây a pas de break.
Le type compte
Soulignons que le contrôle dâégalité est toujours strict. Les valeurs doivent être du même type pour correspondre.
Par exemple, considérons le code suivant :
let arg = prompt("Enter a value?");
switch (arg) {
case '0':
case '1':
alert( 'One or zero' );
break;
case '2':
alert( 'Two' );
break;
case 3:
alert( 'Never executes!' );
break;
default:
alert( 'An unknown value' );
}
- Pour
0,1, la premièrealertest exécutée. - Pour
2, la deuxièmealertest exécutée. - Mais pour
3, le résultat du prompt est une chaîne de caractères"3", ce qui nâest pas strictement égal===au chiffre3. Nous avons donc un code mort dans lecase 3! La variante par défaut sera donc exécutée.
Commentaires
<code>, pour plusieurs lignes â enveloppez-les avec la balise<pre>, pour plus de 10 lignes - utilisez une sandbox (plnkr, jsbin, codepenâ¦)