isNaN()
Baseline
Widely available
Cette fonctionnalité est bien établie et fonctionne sur de nombreux appareils et versions de navigateurs. Elle est disponible sur tous les navigateurs depuis juillet 2015.
La fonction isNaN() détermine si une valeur est NaN, en convertissant d'abord la valeur en nombre si nécessaire. Comme la contrainte à l'intérieur de la fonction isNaN() peut être surprenante, vous pouvez préférer utiliser Number.isNaN().
Exemple interactif
function milliseconds(x) {
if (isNaN(x)) {
return "N'est pas un nombre !";
}
return x * 1000;
}
console.log(milliseconds("100F"));
// Résultat attendu : "N'est pas un nombre !"
console.log(milliseconds("0.0314E+2"));
// Résultat attendu : 3140
Syntaxe
isNaN(value)
Paramètres
value-
La valeur à tester.
Valeur de retour
true si la valeur donnée est NaN après avoir été convertie en nombre ; sinon, false.
Description
isNaN() est une propriété fonction de l'objet global.
Pour les valeurs numériques, isNaN() teste si le nombre vaut NaN. Lorsque l'argument passé à la fonction isNaN() n'est pas de type nombre, la valeur est d'abord contrainte à un nombre, puis la valeur résultante est comparée à NaN.
Ce comportement de isNaN() pour les arguments non numériques peut prêter à confusion ! Par exemple, une chaîne vide est convertie en 0, tandis qu'une valeur booléenne est convertie en 0 ou 1 ; ces deux valeurs ne sont intuitivement « pas des nombres », mais elles ne valent pas NaN, donc isNaN() retourne false. Ainsi, isNaN() ne répond ni à la question « l'entrée est-elle la valeur flottante NaN » ni à la question « l'entrée n'est-elle pas un nombre ».
Number.isNaN() est une façon plus fiable de tester si une valeur est la valeur numérique NaN ou non. Alternativement, l'expression x !== x peut être utilisée, et aucune de ces solutions n'est sujette aux faux positifs qui rendent le isNaN() global peu fiable. Pour tester si une valeur est un nombre, utilisez typeof x === "number".
La fonction isNaN() répond à la question « l'entrée est-elle fonctionnellement équivalente à NaN lorsqu'elle est utilisée dans un contexte numérique ». Si isNaN(x) retourne false, vous pouvez utiliser x dans une expression arithmétique comme s'il s'agissait d'un nombre valide qui n'est pas NaN. Si isNaN(x) retourne true, x sera contraint à NaN et la plupart des expressions arithmétiques retourneront NaN (car NaN se propage). Vous pouvez utiliser cela, par exemple, pour tester si un argument d'une fonction est traitable arithmétiquement (utilisable « comme » un nombre), et gérer les valeurs qui ne sont pas assimilables à un nombre en lançant une erreur, en fournissant une valeur par défaut, etc. De cette façon, vous pouvez avoir une fonction qui exploite toute la polyvalence offerte par JavaScript en convertissant implicitement les valeurs selon le contexte.
Note :
L'opérateur + applique à la fois l'addition de nombre et la concaténation de chaîne de caractères. Ainsi, même si isNaN() retourne false pour les deux opérandes, l'opérateur + peut toujours retourner une chaîne de caractères, car il n'est pas utilisé comme opérateur arithmétique. Par exemple, isNaN("1") retourne false, mais "1" + 1 retourne "11". Pour être sûr de travailler avec des nombres, contraignez la valeur à un nombre et utilisez Number.isNaN() pour tester le résultat.
Exemples
Notez comment isNaN() retourne true pour des valeurs qui ne sont pas la valeur NaN mais qui ne sont pas des nombres non plus :
isNaN(NaN); // true
isNaN(undefined); // true
isNaN({}); // true
isNaN(true); // false
isNaN(null); // false
isNaN(37); // false
// Chaînes de caractères
isNaN("37"); // false : "37" est converti en nombre 37 qui n'est pas NaN
isNaN("37.37"); // false : "37.37" est converti en nombre 37.37 qui n'est pas NaN
isNaN("37,5"); // true
isNaN("123ABC"); // true : Number("123ABC") est NaN
isNaN(""); // false : la chaîne vide est convertie en 0 qui n'est pas NaN
isNaN(" "); // false : une chaîne avec des espaces est convertie en 0 qui n'est pas NaN
// Dates
isNaN(new Date()); // false ; Les objets Date peuvent être convertis en nombre (timestamp)
isNaN(new Date().toString()); // true ; la représentation sous forme de chaîne d'un objet Date ne peut pas être analysée comme un nombre
// Tableaux
isNaN([]); // false ; la représentation primitive est "", qui se convertit en nombre 0
isNaN([1]); // false ; la représentation primitive est "1"
isNaN([1, 2]); // true ; la représentation primitive est "1,2", qui ne peut pas être analysée comme un nombre
Spécifications
| Specification |
|---|
| ECMAScript® 2026 Language Specification # sec-isnan-number |
Compatibilité des navigateurs
Voir aussi
- La propriété globale
NaN - La méthode
Number.isNaN()