549 votes

Comment vérifiez-vous qu'un nombre est une valeur NaN en JavaScript ?

J'ai seulement essayé cela dans la console JavaScript de Firefox, mais aucune des déclarations suivantes ne renvoie true :

parseFloat('geoff') == NaN;

parseFloat('geoff') == Number.NaN;

6 votes

Vaut la peine de lire si votre objectif actuel est de vérifier les numéros : stackoverflow.com/questions/18082/…

3 votes

1 votes

@Gothdo: bien sûr, mais j'ai demandé comment vérifier qu'un nombre est NaN, par opposition à n'importe quelle valeur.

732voto

chiborg Points 7938

Essayez ce code :

isNaN(parseFloat("geoff"))

Pour vérifier si n'importe quelle valeur est NaN, au lieu de seulement les nombres, voir ici : Comment tester si NaN en Javascript ?

10 votes

Est-ce qu'il y a un besoin de paseFloat?

27 votes

Si vous voulez qu'une chaîne vide soit interprétée comme NaN, alors oui. (Je ne dis pas que vous le voudriez toujours.)

1 votes

Si j'étais vous, je le definirais comme une variable et j'utiliserais une condition variable !== variable. Comme c'est indiqué dans les spécifications tc39.github.io/ecma262/#sec-isnan-number

180voto

Jason Points 1040

Je viens de découvrir cette technique dans le livre Effective JavaScript qui est assez simple :

Étant donné que NaN est la seule valeur JavaScript qui est traitée comme étant différente d'elle-même, vous pouvez toujours vérifier si une valeur est NaN en la comparant à elle-même :

var a = NaN;
a !== a; // true 

var b = "foo";
b !== b; // false 

var c = undefined; 
c !== c; // false

var d = {};
d !== d; // false

var e = { valueOf: "foo" }; 
e !== e; // false

Je n'avais pas réalisé cela jusqu'à ce que @allsyed commente, mais c'est spécifié dans le ECMA : https://tc39.es/ecma262/multipage/global-object.html#sec-isnan-number

0 votes

Bien sûr : également noté dans la réponse de @MrAzulay.

48 votes

Efficace mais contre-intuitif. Je ne voudrais pas entretenir ce genre de code.

48 votes

Ce n'est pas le code qui est contre-intuitif, c'est NaN.

64voto

rahul Points 84185

Utilisez ce code :

isNaN('geoff');

Voir isNaN() docs sur MDN.

alert ( isNaN('abcd'));  // alerte true
alert ( isNaN('2.0'));  // alerte false
alert ( isNaN(2.0));  // alerte false

2 votes

Peut-être que c'est juste moi, mais l'idée de NaN devient confuse lorsque var value = 0/0; et var value2 = String("123 131"); créent des valeurs NaN et quelque chose comme ceci var value3 = "abcd"; est également une valeur NaN.

0 votes

@NickPineda Pourquoi ?

20voto

Jerome WAGNER Points 6622

Vous devriez utiliser l'appel de fonction global isNaN(valeur), car:

  • Il est pris en charge par tous les navigateurs
  • Voir isNaN pour la documentation

Exemples:

 isNaN('geoff'); // true
 isNaN('3'); // false

J'espère que cela vous aidera.

1 votes

Oui, isNaN('') //false mais parseInt('') //NaN. La même chose peut être dite pour null.

17voto

Jonathan Azulay Points 1405

NaN est une valeur spéciale qui ne peut pas être testée de cette façon. Une chose intéressante que je voulais simplement partager est la suivante

var nanValue = NaN;
if(nanValue !== nanValue) // Retourne true!
    alert('nanValue est NaN');

Cela retourne true uniquement pour les valeurs NaN et C'est une façon sûre de tester. Devrait certainement être encapsulé dans une fonction ou au moins commenté, car cela n'a pas beaucoup de sens évidemment de tester si la même variable n'est pas égale à elle-même, hehe.

1 votes

Ce n'est pas une méthode parfaitement fiable. Conformément à la spécification, variable !== variable est la méthode la plus fiable pour vérifier NaN.

1 votes

Voir ma réponse ci-dessus sur ceci ^

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X