Number. isFinite()
Vérifie si une valeur est un nombre ordinaire et fini, ni NaN ni infini.
- Renvoie
truesi la valeur est un nombre fini, sinonfalse.
Exemple
#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'))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
#Number.isFinite(value)Paramètres
#value
valeur quelconque
La valeur à vérifier.
Plus d’exemples
#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([]))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.
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'))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 foisNaNet les deux infinis. - Attention aux champs vides :
Number("")donne0, 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 exempleisFinite(null)renvoietrue.
Entrées associées
#Vous voyez une erreur ou il manque un exemple ? Écrivez-nous.