Jak byś użył a, switch
case
kiedy 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
case
kiedy 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 switch
wykonuje, znajduje pierwszą pasującą case
instrukcję, a następnie wykonuje każdy wiersz kodu za przełącznikiem, aż trafi albo na break
instrukcję, albo na koniec switch
(lub return
instrukcję, aby opuścić całą zawierającą funkcję). Gdy umyślnie pominiesz break
kod, tak aby kod pod następnym case
został 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 break
instrukcji jest dość powszechnym błędem w kodowaniu i jest pierwszą rzeczą, na którą powinieneś zwrócić uwagę, jeśli switch
nie 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ć default
sprawę, która zostanie wykonana, jeśli żaden z pozostałych przypadków nie będzie pasował - jeśli nie podasz żadnej default
i 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 someVar
jest 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 someVar
3, 4 lub 5, zobaczysz dwa alerty. Jeśli someVar
jest 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 switch
i break
pozwala 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");
}