Bug #076
🪲 Znajdź buga
console.log(Object.is([1], [1]))
console.log([1] === [1])
console.log(Object.is(NaN, NaN))
console.log(NaN === NaN)
console.log(Object.is(NaN, 0 / 0))
console.log(NaN === 0 / 0)
console.log(Object.is(-0, +0))
console.log(-0 === +0)
Czy porównanie wartości poprzez Object.is()
działa tak samo jak porównanie poprzez operator ===
?
Jakie wartości zostaną zalogowane do konsoli?
🧪 Rozwiązanie
console.log(Object.is([1], [1])) // false
console.log([1] === [1]) // false
console.log(Object.is(NaN, NaN)) // true
console.log(NaN === NaN) // false
console.log(Object.is(NaN, 0 / 0)) // true
console.log(NaN === 0 / 0) // false
console.log(Object.is(-0, +0)) // false
console.log(-0 === +0) // true
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
.
🎢 Plac zabaw
Otwórz edytor w nowym oknie📑 Linki
- Equality comparisons and sameness - JavaScript | MDN
- Object.is() - JavaScript | MDN
- Strict equality (===) - JavaScript | MDN
❤️ Podobają Ci się bugi JS?
Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js