Co zostanie wyświetlone po wykonaniu instrukcji JavaScript
document.write(5 == '5');
A. 0
B. false
C. true
D. 1
Wyświetlona zostanie wartość true. W wyrażeniu 5 == '5' użyto operatora porównania luźnego ==. W JavaScript taki operator przed porównaniem może wykonać konwersję typów. Łańcuch znaków '5' zostaje zamieniony na liczbę 5, więc porównanie ma sens taki jak 5 == 5, a jego wynikiem jest wartość logiczna true. Funkcja document.write wypisuje ten wynik w dokumencie strony jako tekst. Do zapamiętania: == porównuje wartości po ewentualnej konwersji typów, natomiast === porównuje wartość i typ bez takiej konwersji. W praktyce częstą pułapką są dane z formularzy, które przychodzą jako tekst, mimo że wyglądają jak liczby.
W tym przykładzie wynik nie jest liczbą, tylko wartością logiczną wypisaną przez document.write. 0 byłoby spotykane jako liczbowa reprezentacja fałszu w niektórych kontekstach lub językach, ale JavaScript przy wypisywaniu wyniku porównania pokazuje false albo true, a nie 0. 1 mogłoby oznaczać prawdę po konwersji wartości logicznej na liczbę, na przykład w działaniu arytmetycznym, jednak tutaj taka konwersja nie jest wykonywana na potrzeby wyświetlenia. false byłoby trafne przy porównaniu ścisłym 5 === '5', ponieważ liczba 5 i tekst '5' mają różne typy. W podanej instrukcji zastosowano jednak operator ==, czyli porównanie luźne. JavaScript zamienia tekst '5' na liczbę 5, dlatego porównanie daje true. Typowy błąd polega na pomyleniu operatora == z === albo na założeniu, że wartości logiczne zawsze są wyświetlane jako 1 i 0.