Bug #045
🪲 Znajdź buga
const numbers = [10, 20, NaN, 30, null]
console.log(numbers.includes(NaN))
console.log(numbers.includes(30))
console.log(numbers.includes(null))
console.log(numbers.indexOf(NaN))
console.log(numbers.indexOf(30))
console.log(numbers.indexOf(null))
Chcemy sprawdzić czy w tablicy znajdują się różne wartości oraz chcemy poznać ich indeks (pozycję) w tablicy.
Co zostanie zalogowane do konsoli po wywołaniu powyższego kodu?
🧪 Rozwiązanie
const numbers = [10, 20, NaN, 30, null]
console.log(numbers.includes(NaN))
console.log(numbers.includes(30))
console.log(numbers.includes(null))
console.log(numbers
.findIndex((number) => Number.isNaN(number))
)
console.log(numbers.indexOf(30))
console.log(numbers.indexOf(null))
Wszystkie wywołania metody includes()
zwrócą prawdę.
Wartości NaN
oraz null
zostaną poprawnie znalezione w tablicy.
Wywołując metodę indexOf()
dostaniemy jednak wartość -1
dla próby odnalezienia indeksu dla wartości NaN
.
Metoda indexOf()
dla odnajdywania elementów używa tego samego algorytmu co operator porównania ścisłego ===
.
Wartości NaN
porównywane z jakąkolwiek wartością (nawet z wartością NaN
) zawsze zwracają fałsz.
Wywołując indexOf()
z argumentem NaN
zwrócone zostanie zawsze -1
czyli informacja, że wartość nie została znaleziona w tablicy.
Aby rozwiązać ten problem musimy użyć innej metody np. findIndex()
i samodzielnie skonstruować funkcję sprawdzającą pod kątem wystąpienia wartości NaN
.
🎢 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