Jak byś użył a, switch casekiedy musisz przetestować a lub b w tym samym przypadku?
switch (pageid) {
case "listing-page" || "home-page":
alert("hello");
break;
case "details-page":
alert("goodbye");
break;
}
Jak byś użył a, switch casekiedy musisz przetestować a lub b w tym samym przypadku?
switch (pageid) {
case "listing-page" || "home-page":
alert("hello");
break;
case "details-page":
alert("goodbye");
break;
}
Odpowiedzi:
Możesz użyć awaryjnego:
switch (pageid)
{
case "listing-page":
case "home-page":
alert("hello");
break;
case "details-page":
alert("goodbye");
break;
}
Ponieważ inne odpowiedzi wyjaśniły, jak to zrobić, nie wyjaśniając, dlaczego to działa:
Kiedy switchwykonuje, znajduje pierwszą pasującą caseinstrukcję, a następnie wykonuje każdy wiersz kodu za przełącznikiem, aż trafi albo na breakinstrukcję, albo na koniec switch(lub returninstrukcję, aby opuścić całą zawierającą funkcję). Gdy umyślnie pominiesz breakkod, tak aby kod pod następnym casezostał również wykonany, to się nazywa przejście awaryjne . Tak więc dla wymagań PO:
switch (pageid) {
case "listing-page":
case "home-page":
alert("hello");
break;
case "details-page":
alert("goodbye");
break;
}
Zapominanie o dołączaniu breakinstrukcji jest dość powszechnym błędem w kodowaniu i jest pierwszą rzeczą, na którą powinieneś zwrócić uwagę, jeśli switchnie działa tak, jak się spodziewałeś. Z tego powodu niektórzy ludzie lubią wstawiać komentarz, aby powiedzieć „wpadnij”, aby wyjaśnić, kiedy instrukcje break zostały celowo pominięte. Robię to w poniższym przykładzie, ponieważ jest to nieco bardziej skomplikowane i pokazuje, w jaki sposób niektóre przypadki mogą zawierać kod do wykonania, zanim się przewrócą:
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;
}
Możesz także (opcjonalnie) dołączyć defaultsprawę, która zostanie wykonana, jeśli żaden z pozostałych przypadków nie będzie pasował - jeśli nie podasz żadnej defaulti nie będzie pasujących przypadków, nic się nie stanie. Możesz (opcjonalnie) przejść do domyślnego przypadku.
Tak więc w moim drugim przykładzie, jeśli someVarjest to 1, wywołałoby to, someFunction()a następnie zobaczyłbyś cztery alerty, które przechodzą przez wiele przypadków, z których niektóre mają alerty pod nimi. Jest someVar3, 4 lub 5, zobaczysz dwa alerty. Jeśli someVarjest 7, zobaczysz „Coś innego”, a jeśli jest to 8 lub dowolna inna wartość, zobaczysz „Koniec”.
Musisz to zmienić!
switch (true) {
case ( (pageid === "listing-page") || (pageid === ("home-page") ):
alert("hello");
break;
case (pageid === "details-page"):
alert("goodbye");
break;
}
Zapomnij switchi breakpozwala bawić się if. I zamiast twierdzić
if(pageid === "listing-page" || pageid === "home-page")
pozwala stworzyć kilka tablic ze sprawami i sprawdzić to za pomocą Array.prototype.include ()
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");
}