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