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: JavaScript Operator ścisłej równości === w JavaScript Operatory porównania w JavaScript Typ boolean w JavaScript Typ string w JavaScript document.write() w JavaScript

Instrukcja JavaScript

document.write(5 === '5');
wyświetli
A. 0
B. false
C. true
D. 1
Wynik false wynika z działania operatora ścisłej równości === w JavaScript. Ten operator porównuje jednocześnie wartość oraz typ danych, bez wykonywania automatycznej konwersji typów. W instrukcji document.write(5 === '5'); po lewej stronie znajduje się liczba 5, czyli typ number, a po prawej stronie tekst '5', czyli typ string. Mimo że dla człowieka oba zapisy wyglądają bardzo podobnie, dla interpretera JavaScript to są dwa różne typy danych, więc porównanie zwraca wartość logiczną false. document.write wypisuje tę wartość w dokumencie jako tekst false. W praktyce to bardzo ważna rzecz, bo w formularzach dane często przychodzą jako napisy, nawet gdy użytkownik wpisze liczbę. Z mojego doświadczenia lepiej używać === zamiast ==, bo kod jest bardziej przewidywalny i łatwiej uniknąć dziwnych błędów. Jeśli naprawdę chcesz porównać liczby, warto wcześniej zrobić konwersję, np. Number('5') === 5 da true. To jest też zgodne z dobrą praktyką w JavaScript: jawnie konwertować dane, a nie liczyć na to, że język sam zgadnie nasze intencje.
W tym przykładzie łatwo pomylić porównanie ścisłe z luźnym porównaniem, a to w JavaScript robi dużą różnicę. Instrukcja document.write(5 === '5'); nie wypisze ani 1, ani 0, bo wynik operatora === jest wartością logiczną typu boolean, czyli może być true albo false. Liczby 1 i 0 mogą kojarzyć się z prawdą i fałszem z innych języków albo z rzutowania wartości logicznych na liczbę, ale tutaj document.write dostaje bezpośrednio boolean i wypisuje jego tekstową reprezentację. Nie następuje zamiana false na 0, bo nie ma tu operacji arytmetycznej ani jawnej funkcji Number(). Równie kusząca jest odpowiedź true, bo wizualnie 5 oraz '5' oznaczają jakby tę samą wartość. Problem w tym, że '5' jest napisem, a 5 jest liczbą. Operator === nie robi automatycznego dopasowania typów, dlatego różnica między string i number powoduje wynik false. Gdyby użyto operatora ==, wtedy JavaScript spróbowałby wykonać konwersję i wyrażenie 5 == '5' dałoby true. Moim zdaniem właśnie przez takie automatyczne konwersje początkujący często łapią błędy trudne do znalezienia. W profesjonalnym kodzie webowym zwykle preferuje się ===, bo porównania są bardziej jednoznaczne, a dane z formularzy, API czy parametrów URL najlepiej konwertować jawnie, np. przez Number(), parseInt() albo String(), zależnie od sytuacji.

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.