Comment utiliseriez-vous une switch
case
lorsque vous devez tester a o b dans le même cas?
switch (pageid) {
case "listing-page" || "home-page":
alert("hello");
break;
case "details-page":
alert("goodbye");
break;
}
Vous pouvez utiliser les retombées:
switch (pageid)
{
case "listing-page":
case "home-page":
alert("hello");
break;
case "details-page":
alert("goodbye");
break;
}
Puisque les autres réponses ont expliqué comment le faire sans expliquer réellement pourquoi cela fonctionne:
Lorsque switch
est exécuté, il trouve la première instruction case
correspondante, puis exécute chaque ligne de code après le commutateur jusqu'à ce qu'il obtienne une instruction break
ou la fin de la switch
(ou une instruction return
). Lorsque vous omettez délibérément break
afin que le code situé sous le prochain case
soit exécuté également, il est appelé un fall-through. Donc, pour l'exigence du PO:
switch (pageid) {
case "listing-page":
case "home-page":
alert("hello");
break;
case "details-page":
alert("goodbye");
break;
}
Oublier d'inclure les instructions break
est une erreur de codage assez courante et constitue la première chose à rechercher si votre switch
ne fonctionne pas comme prévu. Pour cette raison, certaines personnes aiment ajouter un commentaire pour dire "échouer" pour indiquer clairement quand des déclarations de rupture ont été omises volontairement. Je fais cela dans l'exemple suivant, car il est un peu plus compliqué et montre comment certains cas peuvent inclure du code à exécuter avant qu'ils ne tombent à l'eau:
switch (someVar) {
case 1:
someFunction();
alert("It was 1");
// fall through
case 2:
alert("The 2 case");
// fall through
case 3:
// fall through
case 4:
// fall through
case 5:
alert("The 5 case");
// fall through
case 6:
alert("The 6 case");
break;
case 7:
alert("Something else");
break;
case 8:
// fall through
default:
alert("The end");
break;
}
Vous pouvez également (éventuellement) inclure un cas default
, qui sera exécuté si aucun des autres cas ne correspond - si vous n'incluez pas default
et qu'aucun cas ne correspond, rien ne se passe. Vous pouvez (éventuellement) passer au cas par défaut.
Ainsi, dans mon deuxième exemple, si someVar
vaut 1, il appellerait someFunction()
et vous verriez alors quatre alertes car il survient dans plusieurs cas, dont certains contiennent des alertes. someVar
vaut 3, 4 ou 5, vous verriez deux alertes. Si someVar
est 7, vous verrez "Quelque chose d'autre" et s'il s'agit de 8 ou de toute autre valeur, vous verrez "La fin".
Vous devez créer deux étiquettes case
.
Le contrôle passera de la première étiquette à la seconde, de sorte qu'ils exécuteront le même code.
Vous devez le changer!
switch (true) {
case ( (pageid === "listing-page") || (pageid === ("home-page") ):
alert("hello");
break;
case (pageid === "details-page"):
alert("goodbye");
break;
}
Oublier switch
et break
, permet de jouer avec if
. Et au lieu d'affirmer
if(pageid === "listing-page" || pageid === "home-page")
permet de créer plusieurs tableaux avec des cas et de vérifier avec Array.prototype.includes ()
var caseA = ["listing-page", "home-page"];
var caseB = ["details-page", "case04", "case05"];
if(caseA.includes(pageid)) {
alert("hello");
}
else if (caseB.includes(pageid)) {
alert("goodbye");
}
else {
alert("there is no else case");
}