Do porównania dwóch wartości w JavaScript używa się zapisu === lub == . Wynikiem porównania === będzie „true” tylko w sytuacji, gdy zarówno typ danych jak i wartość będą sobie równe. Oznacza to, że wynikiem porównania 99 === „99” będzie false ponieważ pierwsza wartość jest liczbą, a druga to String. Żeby w powyższym przykładzie uzyskać wynik „true” należałoby najpierw dokonać konwersji typów co dzieje się automatycznie dzięki == .
Jak działa konwersja?
- Jeżeli wartość typu String porównuje się z liczbą JS próbuje zamienić String na liczbę. Jeżeli to się powiedzie to zamieniona liczba jest porównywana. Jeżeli nie to wartość zamieniona jest na NaN.
- Wartość typu boolean zamieniana jest na liczbę według: true = 1; false = 0.
Przykłady porównań:
99 == "99" -> true
; ponieważ prawa strona zamieniona jest na liczbę i następnie następuje porównanie50 == "test" -> false
; prawej strony nie udało się skonwertować na liczbę w wyniku czego „test” został zamieniony na NaN (Not a Number)1 == true -> true
; wartości boolean zamieniane są na liczby (true = 1, false = 0)"1" == true -> true
; prawa wartość identycznie jak powyżej ma wartość 1, następnie lewa strona zamieniona jest na liczbę i porównana1 == "" -> false
; lewa strona zamieniona jest na 0, w wyniku czego wynikiem jest false"true" == true -> false
; lewa strona wyrażenia zamieniona jest na NaN, a prawa na 1 w wyniku czego uzyskujemy watość false
Podobnie dzieje się w przypadku działań arytmetycznych, gdy po dwóch stronach działania znajdują się różne typy. Wyjątkiem jest dodawanie, które oznacza konkatenację czyli operację łączenia stringów. Gdy jeden z elementów równania jest to string zamiast działania uzyskujemy połączenie stringów.
"107" + 91 = "10791"
– jedna ze stron to String dlatego następuje konkatenacja7 + "1 9" = "71 9"
– jedna ze stron to String dlatego następuje konkatenacja3 + " drzwi" = "3 drzwi"
– jedna ze stron to String dlatego następuje konkatenacja18 + 20 = 38
– dwie liczby z tego powodu uzyskujemy normalne działanie"1" - "1" = 0
– dwa stringi, ale operacja odejmowania (przy dodawaniu wynikiem byłoby 11), tutaj wynikiem jest konwersja „1” na 1 oraz normalne odejmowanie"75b" - 15 = NaN
– nie udało się zamienić „75b” na liczbę w wyniki pojawił się NaN (Not a Number)1 + true = 2
– wartość boolean true zamieniona jest na liczbę 1, a następnie zsumowane 1 + 1"1" - true = 0
– jeden String, ale operacja odejmowania, dzięki temu „1” zamieniona na liczbę oraz true zamieniona na 1
Powyższe przykłady oraz jeszcze więcej zobaczyć można poniżej na screenie z console.log: