Przejdź do głównej treści

Kwalifikacja: INF.03 - Tworzenie i administrowanie stronami i aplikacjami internetowymi oraz bazami danych

Zawód: Technik informatyk, Technik programista

Kategorie: Programowanie webowe Algorytmy i podstawy informatyki JavaScript

Na podstawie przedstawionego kodu w języku JavaScript można powiedzieć, że alert nie zostanie wyświetlony, ponieważ

var x = 10;
switch(x) {
    case "10": alert("Test instrukcji switch");
}
A. w instrukcji switch w wyrażeniu case nie dostosowano zapisu wartości do typu zmiennej x.
B. nie zastosowano wyrażenia default.
C. wartość zmiennej x nie została zdefiniowana przed instrukcją switch.
D. nie zastosowano instrukcji break.

Pytanie z egzaminu CKE, styczeń 2023 (arkusz EE.09-SG-23.01).

W tym kodzie alert nie zostanie wyświetlony, bo instrukcja switch w JavaScript porównuje wartość z etykietami case tak, jak przy porównaniu ścisłym, czyli podobnie do operatora ===. Zmienna x ma wartość liczbową 10, bo zapis var x = 10 tworzy liczbę typu number. Natomiast case '10' oznacza tekst, czyli wartość typu string. Dla JavaScriptu liczba 10 i napis '10' to nie jest to samo, mimo że na ekranie wyglądają bardzo podobnie. Dlatego blok z alertem nie zostanie wykonany. Poprawnie byłoby np. użyć case 10: alert('Test instrukcji switch'); albo wcześniej świadomie zamienić typ danych, jeśli faktycznie pracujemy na tekście, np. String(x). Moim zdaniem to jest jeden z tych drobnych szczegółów JS, które szybko wychodzą przy obsłudze formularzy, bo dane z pól input często przychodzą jako string. Dobra praktyka branżowa jest taka: pilnujemy typów danych i nie liczymy na przypadkową konwersję. Dzięki temu kod jest przewidywalny, łatwiejszy do debugowania i mniej podatny na dziwne błędy.
Warto tu dobrze rozdzielić kilka pojęć, bo przy instrukcji switch łatwo pomylić brak dopasowania z innymi elementami składni. Wyrażenie default nie jest wymagane, żeby switch działał poprawnie. Jest ono tylko zapasową gałęzią wykonywaną wtedy, gdy żadna etykieta case nie pasuje do wartości sprawdzanej. Gdyby w tym przykładzie był zapis default: alert('brak dopasowania'), wtedy alert z default mógłby się pojawić, ale brak default sam w sobie nie blokuje działania poprawnego case. Problem leży gdzie indziej: case porównuje nie tylko wartość, ale też typ, więc number 10 nie pasuje do stringa '10'. Zmienna x również została poprawnie zdefiniowana przed instrukcją switch, więc nie ma tutaj błędu z niezadeklarowaną albo niezainicjalizowaną zmienną. Gdyby x nie istniała, pojawiłby się błąd wykonania albo inny problem zależny od kontekstu, ale tutaj var x = 10 jest jasnym przypisaniem. Instrukcja break też nie ma wpływu na to, czy pierwszy pasujący case zostanie znaleziony. Break służy do zatrzymania dalszego wykonywania kolejnych przypadków po trafieniu dopasowania, czyli zapobiega tak zwanemu fall-through. Jeśli case w ogóle nie pasuje, brak break nie ma czego zatrzymywać. Z mojego doświadczenia uczniowie często skupiają się na default i break, bo są charakterystyczne dla switch, ale w JavaScript najważniejsza pułapka jest właśnie w typach danych. W praktyce, szczególnie przy formularzach WWW, warto sprawdzać czy pracujemy na liczbach, czy na tekstach, np. używając Number(), parseInt() albo świadomie porównując do wartości zapisanej jako string.

Wymagane logowanie

Ocenianie trudności pytań jest dostępne tylko dla zalogowanych użytkowników. Zaloguj się, aby skorzystać z pełni możliwości platformy.

Twoja ocena pomoże innym uczniom w przygotowaniu do egzaminu, a Tobie pozwoli na dostęp do spersonalizowanych statystyk.

Zgłoś błąd w pytaniu

Rozwiń sekcję i zmień pole, którego dotyczy błąd. Wysłane zostaną tylko zmienione sekcje.

Błędna kwalifikacja
Błąd w treści pytania
Błąd w treści odpowiedzi
Błąd w obrazie
Dane kontaktowe (opcjonalnie)
Podaj email, jeśli chcesz otrzymać informację o rozpatrzeniu zgłoszenia.