Number. isFinite()
Sprawdza, czy wartość jest zwykłą, skończoną liczbą, a nie NaN ani nieskończonością.
- Zwraca
true, jeśli wartość jest skończoną liczbą, w przeciwnym raziefalse.
Przykład
#console.log(Number.isFinite(42))
console.log(Number.isFinite(5 / 0))
console.log(Number.isFinite(Number('abc')))
console.log(Number.isFinite('42'))
console.log(isFinite('42'))Definicja i zastosowanie
#Funkcja Number.isFinite() zwraca true tylko wtedy, gdy wartość jest typu number i nie jest NaN, Infinity ani -Infinity. To najprostszy sposób, żeby upewnić się, że wynik obliczeń albo zamiany tekstu nadaje się do dalszej pracy.
Nieskończoność pojawia się częściej, niż się wydaje. Dzielenie przez zero (5 / 0) daje Infinity zamiast błędu, Math.max() wywołane bez argumentów zwraca -Infinity, a zbyt duża liczba w tekście, np. "1e999", zamienia się na Infinity. Number.isFinite() wyłapie takie przypadki razem z NaN jednym sprawdzeniem.
Funkcja nie zamienia typów: napis "42" nie jest liczbą, więc wynik to false. Starsza, globalna funkcja isFinite() najpierw zamienia argument na liczbę, więc dla "42" zwróci true, a dla null też true, bo null zamienia się na 0. Dlatego w nowym kodzie wybieraj wersję z Number.
Składnia
#Number.isFinite(value)Parametry
#value
dowolna wartość
Sprawdzana wartość.
Więcej przykładów
#function average(scores) {
const result = scores.reduce((sum, score) => sum + score, 0) / scores.length
return Number.isFinite(result) ? result : 0
}
console.log(average([80, 90, 100]))
console.log(average([]))Średnia z pustej listy to 0 / 0, czyli NaN. Zamiast pokazać go użytkownikowi, funkcja zwraca 0.
function parseAmount(text) {
const amount = Number(text.replace(',', '.'))
return Number.isFinite(amount) ? amount : null
}
console.log(parseAmount('12,50'))
console.log(parseAmount('abc'))
console.log(parseAmount('1e999'))Obsługa przeglądarek
#Szeroko dostępne
Działa we wszystkich nowoczesnych przeglądarkach, także na telefonach. Możesz używać bez obaw.
- Chrome
- Edge
- Firefox
- Safari
Dobre praktyki
#- Po zamianie tekstu na liczbę jedno sprawdzenie
Number.isFinite(x)odrzuci narazNaNi obie nieskończoności. - Uważaj na puste pola:
Number("")daje0, które jest skończoną liczbą. Pusty napis sprawdź osobno, zanim zamienisz go na liczbę. - Unikaj globalnego
isFinite(), bo po cichu zamienia typy, np.isFinite(null)zwracatrue.
Powiązane hasła
#Widzisz błąd albo brakuje przykładu? Napisz do nas.