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

Słowa kluczowe: DOM w JavaScript Dynamiczne typowanie w JavaScript Operator ścisłej równości === w JavaScript

Instrukcja JavaScript:

document.write(5==='5');
wyświetli
A. 1
B. 0
C. false
D. true

Pytanie z egzaminu CKE, styczeń 2019 (arkusz E.14-X-19.01).

W tej instrukcji wynik to false, ponieważ operator === w JavaScript oznacza ścisłe porównanie, czyli sprawdza jednocześnie wartość oraz typ danych. Liczba 5 ma typ number, natomiast '5' ma typ string, czyli jest tekstem. Mimo że wizualnie wyglądają podobnie, dla interpretera JavaScript to nie są te same dane. Dlatego wyrażenie 5 === '5' zwraca false, a document.write wypisuje właśnie ten wynik na stronie. W praktyce to bardzo ważne, bo porównania ścisłe pomagają unikać dziwnych błędów, szczególnie przy obsłudze formularzy, gdzie dane wpisane przez użytkownika często przychodzą jako tekst. Moim zdaniem warto od początku przyzwyczajać się do używania === zamiast ==, bo jest to zgodne z dobrymi praktykami JavaScript i ułatwia pisanie przewidywalnego kodu. Gdyby zapisano 5 == '5', wynik byłby true, ponieważ zwykłe porównanie wykonuje konwersję typów. Przy === takiej konwersji nie ma, i o to właśnie chodzi.
W tym przykładzie łatwo pomylić dwa różne sposoby porównywania w JavaScript. Wynik nie może być true, bo operator === nie sprawdza tylko tego, czy po obu stronach widzimy podobną wartość. On porównuje wartość oraz typ danych. Po lewej stronie jest liczba 5, a po prawej tekst '5'. Dla człowieka to może wyglądać prawie tak samo, ale dla silnika JavaScript to dwa różne typy: number i string. Właśnie dlatego wynik jest false.

Odpowiedzi 1 albo 0 też nie pasują do tej sytuacji. W JavaScript wyrażenie logiczne zwraca wartości boolean, czyli true albo false, a nie automatycznie liczby 1 i 0. Owszem, w niektórych językach programowania albo w pewnych kontekstach logiczne prawda/fałsz może być kojarzone z 1 i 0, ale tutaj document.write wypisuje bezpośredni wynik porównania. Nie następuje tu zamiana wartości logicznej na liczbę. To jest taki częsty błąd myślowy, szczególnie gdy ktoś wcześniej uczył się C, C++ albo PHP.

Trzeba też uważać na mylenie === z ==. Operator == wykonuje konwersję typów, więc 5 == '5' dałoby true. Natomiast === jest bardziej rygorystyczny i właśnie dlatego jest zalecany w nowoczesnym JavaScript. Z mojego doświadczenia wynika, że używanie ścisłego porównania bardzo pomaga przy debugowaniu, bo program nie próbuje za nas zgadywać, co mieliśmy na myśli. W aplikacjach webowych ma to spore znaczenie, na przykład przy walidacji danych z formularzy, porównywaniu identyfikatorów czy sprawdzaniu ustawień użytkownika.

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.