Bug #034
🪲 Znajdź buga
console.log(NaN == NaN)
console.log(NaN === NaN)
console.log(Number.NaN == Number.NaN)
console.log(Number.NaN === Number.NaN)
console.log(isNaN(NaN))
console.log(Number.isNaN(NaN))
console.log(isNaN("123"))
console.log(Number.isNaN("123"))
console.log(isNaN("abc"))
console.log(Number.isNaN("abc"))
const valueIsNaN = (val) => val !== val
console.log(valueIsNaN("123"))
console.log(valueIsNaN("abc"))
console.log(valueIsNaN(NaN))
console.log(valueIsNaN(Number.NaN))
Jakie wartości logiczne zostaną zalogowane do konsoli?
Czy metoda isNaN() działa tak samo jak metoda Number.isNaN()?
Czy funkcja valueIsNaN() spełni zadanie sprawdzania wartości NaN?
🧪 Rozwiązanie
console.log(NaN == NaN) // false
console.log(NaN === NaN) // false
console.log(Number.NaN == Number.NaN) // false
console.log(Number.NaN === Number.NaN) // false
console.log(isNaN(NaN)) // true
console.log(Number.isNaN(NaN)) // true
console.log(isNaN("123")) // false
console.log(Number.isNaN("123")) // false
console.log(isNaN("abc")) // true (!)
console.log(Number.isNaN("abc")) // false
const valueIsNaN = (val) => val !== val
console.log(valueIsNaN("123")) // false
console.log(valueIsNaN("abc")) // false
console.log(valueIsNaN(NaN)) // true
console.log(valueIsNaN(Number.NaN)) // true
NaN jest wyjątkową wartością w JavaScript. Jako jedyna porównana sama ze sobą zwraca fałsz. Nie ma znaczenia, czy użyjemy ścisłego (===) czy luźnego (==) porównania.
Jedyną opcją na sprawdzenie, czy wartością jest NaN jest użycie dostępnej w globalnym kontekście metody isNaN() lub Number.isNaN.
Alternatywnie, możemy stworzyć własną funkcję, która porówna ścisłą nierówność (!==) przekazanej wartości. Prawda zwrócona zostanie tylko wtedy, gdy jako argument funkcji przekażemy NaN.
Na bardzo mocną uwagę zasługuje isNaN("abc").
"abc" === NaN w żaden sposób nie jest prawdziwe.
"abc" nie jest wartością NaN, dlaczego więc dostajemy z tej metody odpowiedź true?
Bo w JavaScript, metoda isNaN() działa inaczej niż Number.isNaN().
isNaN() zwraca true jeśli argument jest wartością NaN, lub jeśli będzie wartością NaN po jego konwersji na wartość liczbową 🤯.
🎢 Plac zabaw
Otwórz edytor w nowym oknie📑 Linki
❤️ Podobają Ci się bugi JS?
Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js