Outre l'instruction if, JavaScript dispose aussi de l'instruction switch pour exécuter du code de manière conditionnelle.
On l'utilise lorsqu'une même variable doit être comparée à plusieurs valeurs possibles.
La comparaison se fait par un test d'égalité stricte (===), voir le concept de comparaison.
Pour une variable x donnée, l'instruction switch en JavaScript a la syntaxe suivante.
switch (x) {
case option1:
// code that is executed when "x === option1" is true
break;
case option2:
// code that is executed when "x === option2" is true
break;
default:
// code that is executed when x does not equal any of the
// options
}
Le cas default est facultatif ; on l'utilise lorsqu'on veut exécuter du code si aucune des autres options ne correspond à la variable.
Les instructions break ci-dessus sont nécessaires parce que, par défaut, un switch passe au cas suivant en JavaScript.
Cela signifie que, sans instruction break, tout le code des cas qui suivent la première option correspondante serait exécuté, même si x ne correspondait pas à ces options.
Ce comportement de passage au cas suivant par défaut est un piège fréquent lorsqu'on utilise switch en JavaScript.
À l'intérieur d'une fonction, on peut aussi utiliser return à la place de break pour éviter ce problème.
Tu peux tirer parti de ce comportement de passage au cas suivant lorsque tu veux appliquer le même code à plusieurs cas. Tu en trouveras un exemple dans la documentation MDN.
Par défaut, les variables déclarées dans les différentes instructions case partagent la même portée.
Cela peut conduire à un comportement inattendu.
Par exemple, si tu copies-colles un cas, tu peux te retrouver avec une déclaration let message dans deux cas, ce qui provoque une erreur, voir la documentation MDN.
Pour éviter les problèmes liés à la portée partagée, tu peux créer une portée distincte pour chaque cas en ajoutant un bloc de code entre accolades ({}) à chacun d'eux.
switch (x) {
case option1: {
// Variables declared here are contained to this case.
break;
}
case option2: {
// ...
break;
}
default: {
// ...
}
}
Au lieu d'une variable x, tu peux aussi utiliser une expression.
Cette expression est évaluée une seule fois au début de l'instruction switch, puis le résultat est comparé aux différents cas.
Un usage courant en est le « type switch », qui exécute du code différent selon le type d'une variable.
switch (typeof x) {
case 'string':
// code that is executed when x is a string
break;
case 'number':
// code that is executed when x is a number
break;
default:
// code that is executed when x has some other type
}
Les options peuvent elles aussi être des expressions.