JavaScriptLiczby i Math

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 razie false.
Na tej stronie

Przykład

#
JavaScript
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'))
Konsola
true
false
false
false
true

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

#
Składnia
Number.isFinite(value)

Parametry

#
  • value

    dowolna wartość

    Sprawdzana wartość.

Więcej przykładów

#
Bezpieczna średnia
JavaScript
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([]))
Konsola
90
0

Średnia z pustej listy to 0 / 0, czyli NaN. Zamiast pokazać go użytkownikowi, funkcja zwraca 0.

Walidacja kwoty z formularza
JavaScript
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'))
Konsola
12.5
null
null

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 naraz NaN i obie nieskończoności.
  • Uważaj na puste pola: Number("") daje 0, 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) zwraca true.

Powiązane hasła

#

Widzisz błąd albo brakuje przykładu? Napisz do nas.