Przejdź do głównej zawartości

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