Comment utiliseriez-vous a switch
case
lorsque vous devez tester a ou b dans le même cas?
switch (pageid) {
case "listing-page" || "home-page":
alert("hello");
break;
case "details-page":
alert("goodbye");
break;
}
Comment utiliseriez-vous a switch
case
lorsque vous devez tester a ou b dans le même cas?
switch (pageid) {
case "listing-page" || "home-page":
alert("hello");
break;
case "details-page":
alert("goodbye");
break;
}
Réponses:
Vous pouvez utiliser la fonction Fall-through:
switch (pageid)
{
case "listing-page":
case "home-page":
alert("hello");
break;
case "details-page":
alert("goodbye");
break;
}
Étant donné que les autres réponses ont expliqué comment le faire sans vraiment expliquer pourquoi cela fonctionne:
Lorsque le switch
s'exécute, il trouve la première case
instruction correspondante , puis exécute chaque ligne de code après le commutateur jusqu'à ce qu'il atteigne une break
instruction ou la fin de switch
(ou une return
instruction pour quitter l'intégralité de la fonction contenant). Lorsque vous omettez délibérément le break
afin que le code sous le suivant case
soit également exécuté, cela s'appelle une erreur . 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 des break
instructions est une erreur de codage assez courante et c'est la première chose que vous devez rechercher si votre switch
ne fonctionne pas comme prévu. Pour cette raison, certaines personnes aiment mettre un commentaire pour dire "fall through" pour indiquer clairement quand les déclarations de pause ont été délibérément omises. Je fais cela dans l'exemple suivant car c'est un peu plus compliqué et montre comment certains cas peuvent inclure du code à exécuter avant de tomber:
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 (facultativement) inclure un default
cas, qui sera exécuté si aucun des autres cas ne correspond - si vous n'incluez pas dedefault
cas et aucun cas, rien ne se passe. Vous pouvez (facultativement) passer au cas par défaut.
Donc, dans mon deuxième exemple, si someVar
est 1, il appellerait someFunction()
et vous verriez alors quatre alertes car il tombe dans plusieurs cas, dont certains ont des alertes sous eux. Est -ce someVar
est 3, 4 ou 5 , vous verriez deux alertes. Si someVar
c'est 7, vous verrez "autre chose" et si c'est 8 ou toute autre valeur, vous verrez "La fin".
Vous devez le changer!
switch (true) {
case ( (pageid === "listing-page") || (pageid === ("home-page") ):
alert("hello");
break;
case (pageid === "details-page"):
alert("goodbye");
break;
}
Oubliez switch
et break
, jouons 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 le 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");
}