Comment utiliseriez-vous a switch caselorsque 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 caselorsque 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 switchs'exécute, il trouve la première caseinstruction correspondante , puis exécute chaque ligne de code après le commutateur jusqu'à ce qu'il atteigne une breakinstruction ou la fin de switch(ou une returninstruction pour quitter l'intégralité de la fonction contenant). Lorsque vous omettez délibérément le breakafin que le code sous le suivant casesoit é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 breakinstructions est une erreur de codage assez courante et c'est la première chose que vous devez rechercher si votre switchne 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 defaultcas, 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 someVarest 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 someVarest 3, 4 ou 5 , vous verriez deux alertes. Si someVarc'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 switchet 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");
}