Przejdź do głównej zawartości

Polegając na dedukcji w języku JavaScript, można wpaść w pułapkę.

Logicznym wydaje się, że jeśli null nie jest równy 0 i nie jest też większy > od 0, to nie powinien być większy lub równy 0, a jednak jest.

Powodem jest niespójność działania algorytmów porównania.

Algorytm porównania ==, jeśli napotka na operand null lub undefined to aby zwrócić prawdę z takiego porównania, wymaga aby drugi operand również był null albo undefined.

null może być równy tylko wartości null. Ten sam algorytm porównania == wprowadza jednak konwersję innych typów danych np. wartości logicznych true i false, sprowadzając je do wartości liczbowych 1 i 0.

Algorytm stojący za porównaniem większy niż > działa inaczej.

Najpierw podmienia on miejscami operandy i stosuje algorytm porównanie mniejszy niż < (co nie ma tutaj żadnego znaczenia).

Później natomiast, UWAGA, konwertuje wartości logiczne true/false na 1/0, ale TAKŻE wartość null na 0.

Wartość undefined konwertuje natomiast na NaN.

Operator większy lub równy >= robi z null to samo, więc finalnie wyrażenie zostaje zamienione na 0 >= 0, co staje się prawdą.