Przejdź do głównej zawartości

Object.is() mimo, że swoją nazwą sugeruje porównywanie obiektów, w rzeczywistości porównuje dwie wartości przekazane jako argumenty do metody is().

Metoda działa bardzo podobnie do porównania, które wykonuje operator ===, ale z małymi wyjątkami.

Porównanie dwóch wartości NaN za pomocą Object.is() da prawdę.

Tego samego nie możemy się jednak spodziewać po działaniu operatora ===, który jeśli napotka operand NaN, to zawsze zwraca fałsz.

Nie ma tutaj znaczenia czy NaN jest przekazany bezpośrednio jako wartość, czy jest wynikiem działania, np. dzielenia 0 / 0.

Drugim wyjątkiem i nieścisłością pomiędzy Object.is(), a operatorem === jest porównanie zera ujemnego z zerem dodatnim.

W informatyce zapis liczb w pamięci w postaci binarnej wiąże się z użyciem dodatkowego bita (sign), który określa czy liczba jest dodatnia czy ujemna.

Bit ten może być użyty również dla liczby 0, tym samym rozgraniczając ją na dwie wartości: -0 i +0.

Dla Object.is() zero ujemne będzie różniło się od zera dodatniego więc porównanie ich zwróci false.

Dla operatora === oba zera będą takie same, zwracając w efekcie ich porównania wartość true.