JavaScriptNombres et Math

Number.isFinite()

Vérifie si une valeur est un nombre ordinaire et fini, ni NaN ni infini.

Renvoie
true si la valeur est un nombre fini, sinon false.
Sur cette page

Exemple

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

Définition et utilisation

#

La fonction Number.isFinite() renvoie true seulement quand la valeur est de type number et n’est ni NaN, ni Infinity, ni -Infinity. C’est le moyen le plus simple de s’assurer que le résultat d’un calcul ou d’une conversion de texte peut être utilisé sans risque.

L’infini apparaît plus souvent qu’on ne le pense. Diviser par zéro (5 / 0) donne Infinity au lieu d’une erreur, Math.max() appelée sans argument renvoie -Infinity, et un nombre trop grand écrit en texte, comme "1e999", se transforme en Infinity. Number.isFinite() détecte tous ces cas en même temps que NaN, en une seule vérification.

La fonction ne convertit pas les types : la chaîne "42" n’est pas un nombre, donc le résultat est false. L’ancienne fonction globale isFinite() convertit d’abord l’argument en nombre, donc elle renvoie true pour "42", et aussi true pour null, car null se convertit en 0. C’est pourquoi, dans du code neuf, mieux vaut choisir la version avec Number.

Syntaxe

#
Syntaxe
Number.isFinite(value)

Paramètres

#
  • value

    valeur quelconque

    La valeur à vérifier.

Plus d’exemples

#
Une moyenne sûre
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([]))
Console
90
0

La moyenne d’une liste vide vaut 0 / 0, c’est-à-dire NaN. Plutôt que de l’afficher à l’utilisateur, la fonction renvoie 0.

Validation d’un montant de formulaire
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'))
Console
12.5
null
null

Compatibilité des navigateurs

#

Largement disponible

Fonctionne dans tous les navigateurs modernes, y compris sur mobile. Vous pouvez l’utiliser sans crainte.

  • Chrome
  • Edge
  • Firefox
  • Safari

Bonnes pratiques

#
  • Après avoir converti un texte en nombre, une seule vérification Number.isFinite(x) rejette à la fois NaN et les deux infinis.
  • Attention aux champs vides : Number("") donne 0, qui est un nombre fini. Vérifiez la chaîne vide séparément, avant de la convertir en nombre.
  • Évitez la fonction globale isFinite(), car elle convertit les types en silence, par exemple isFinite(null) renvoie true.

Entrées associées

#

Vous voyez une erreur ou il manque un exemple ? Écrivez-nous.