Come si usa una switch casequando è necessario prova per una o B nello stesso caso?
switch (pageid) {
case "listing-page" || "home-page":
alert("hello");
break;
case "details-page":
alert("goodbye");
break;
}
Come si usa una switch casequando è necessario prova per una o B nello stesso caso?
switch (pageid) {
case "listing-page" || "home-page":
alert("hello");
break;
case "details-page":
alert("goodbye");
break;
}
Risposte:
È possibile utilizzare fall-through:
switch (pageid)
{
case "listing-page":
case "home-page":
alert("hello");
break;
case "details-page":
alert("goodbye");
break;
}
Poiché le altre risposte hanno spiegato come farlo senza effettivamente spiegare perché funziona:
Quando switchviene eseguito, trova la prima caseistruzione corrispondente e quindi esegue ogni riga di codice dopo lo switch fino a quando non colpisce breakun'istruzione o la fine dell'istruzione switch(o returnun'istruzione per lasciare l'intera funzione di contenimento). Quando si omette deliberatamente in breakmodo che anche il codice sotto il successivo casevenga eseguito, questo viene chiamato fall-through . Quindi per il requisito del PO:
switch (pageid) {
case "listing-page":
case "home-page":
alert("hello");
break;
case "details-page":
alert("goodbye");
break;
}
Dimenticare di includere le breakdichiarazioni è un errore di codifica abbastanza comune ed è la prima cosa che dovresti cercare se switchnon stai funzionando come previsto. Per questo motivo ad alcune persone piace inserire un commento per dire "fall through" per chiarire quando le dichiarazioni di rottura sono state omesse di proposito. Lo faccio nell'esempio seguente poiché è un po 'più complicato e mostra come alcuni casi possono includere il codice da eseguire prima che cadano:
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;
}
Puoi anche (facoltativamente) includere un defaultcaso, che verrà eseguito se nessuno degli altri casi corrisponde - se non includi una corrispondenza defaulte nessun caso, allora non accade nulla. È possibile (facoltativamente) passare al caso predefinito.
Quindi nel mio secondo esempio, se someVarè 1, chiamerebbe someFunction()e quindi vedresti quattro avvisi mentre scorre attraverso più casi alcuni dei quali hanno avvisi sotto di essi. È someVar3, 4 o 5 vedresti due avvisi. Se someVarè 7 vedresti "Qualcos'altro" e se è 8 o qualsiasi altro valore vedresti "La fine".
Devi cambiarlo!
switch (true) {
case ( (pageid === "listing-page") || (pageid === ("home-page") ):
alert("hello");
break;
case (pageid === "details-page"):
alert("goodbye");
break;
}
Dimentica switche break, consente di giocare con if. E invece di affermare
if(pageid === "listing-page" || pageid === "home-page")
consente di creare più array con case e controllarlo con 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");
}