Instrukcja switch w JavaScript wybiera gałąź case na podstawie dopasowania wartości wyrażenia (np. x) do etykiet case. Kluczowe jest to, że dopasowanie odbywa się w praktyce jak przy porównaniu ścisłym (bez automatycznej zmiany typu). Oznacza to, że wartości 1 (liczba) i "1" (łańcuch znaków) nie są uznawane za równe.
Dlatego jeżeli zmienna x ma np. typ liczbowy, a w instrukcji switch w etykietach case zapisano wartości jako napisy, to nie nastąpi dopasowanie i kod w tych gałęziach (w tym alert) nie zostanie uruchomiony. To uzasadnia odpowiedź: "w instrukcji switch w wyrażeniu case nie dostosowano zapisu wartości do typu zmiennej x."
Dlaczego pozostałe odpowiedzi są błędne w tym kontekście?
- "nie zastosowano wyrażenia default" – default odpowiada za zachowanie, gdy nie ma dopasowania. Sam jego brak nie jest przyczyną "techniczną"; przyczyną bazową jest to, że nie trafiono w żaden case (tu: przez typ). Default może być dodatkiem, ale nie wyjaśnia źródła niedopasowania.
- "wartość zmiennej x nie została zdefiniowana" – gdyby x nie istniała, najczęściej doszłoby do błędu wykonania (ReferenceError), a nie "cichego" braku alertu wynikającego z logiki switch. To inny mechanizm problemu.
- "nie zastosowano instrukcji break" – brak break powoduje tzw. fall-through (przejście do kolejnych case), ale dopiero po wejściu do jakiegoś case. Jeśli nie ma dopasowania do żadnego case, brak break nie ma znaczenia dla uruchomienia alertu.
W praktyce, aby uniknąć takich błędów, należy ujednolicić typy (np. rzutować dane wejściowe do liczby) albo zapisywać etykiety case zgodnie z typem zmiennej.