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