PHANTOM
🇮🇳 IN

Cette page a été traduite à partir de l'anglais par la communauté. Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.

View in English Always switch to English

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

js
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 :

js
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