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ównanie
  • 50 == "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ównana
  • 1 == "" -> 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 konkatenacja
  • 7 + "1 9" = "71 9" – jedna ze stron to String dlatego następuje konkatenacja
  • 3 + " drzwi" = "3 drzwi" – jedna ze stron to String dlatego następuje konkatenacja
  • 18 + 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:

JS - konwersje typów danych w Java Script