Je ne l'ai essayé que dans la console JavaScript de Firefox, mais aucune des déclarations suivantes ne renvoie true:
parseFloat('geoff') == NaN;
parseFloat('geoff') == Number.NaN;
javascript
nan
Paul D. Waite
la source
la source
Réponses:
Essayez ce code:
Pour vérifier si une valeur est NaN, au lieu de simplement des nombres, voir ici: Comment tester NaN en Javascript?
la source
NaN
, alors oui. (Je ne dis pas que vous le feriez toujours.)isNaN(parseFloat("geoff")) // true
isNaN(parseFloat("10geo")) // false
Comment est-ce utile?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 inégale à elle-même, vous pouvez toujours tester si une valeur est NaN en vérifiant son égalité avec elle-même:
Je ne l'ai pas réalisé jusqu'à ce que @allsyed commente, mais cela se trouve dans la spécification ECMA: https://tc39.github.io/ecma262/#sec-isnan-number
la source
Utilisez ce code:
Voir les
isNaN()
documents sur MDN .la source
var value = 0/0;
etvar value2= String("123 131");
crée des valeurs NaN et quelque chose comme çavar value3 = "abcd";
est aussi une valeur NaN.Dans la mesure où une valeur de type Number doit être testée, qu'elle soit
NaN
ou non, la fonction globaleisNaN
fera le travailPour une approche générique qui fonctionne pour tous les types de JS, nous pouvons utiliser l'un des éléments suivants:
Pour les utilisateurs d'ECMAScript-5:
Pour les personnes utilisant ECMAScript-6:
Et à des fins de cohérence dans ECMAScript 5 et 6, nous pouvons également utiliser ce polyfill pour Number.isNan
veuillez vérifier cette réponse pour plus de détails.
la source
isNaN
convertit d'abord l'argument en une valeur numérique.NaN est une valeur spéciale qui ne peut pas être testée comme ça. Une chose intéressante que je voulais juste partager est la suivante
Cela renvoie vrai uniquement pour les valeurs NaN et est un moyen sûr de tester. Devrait certainement être enveloppé 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 l'une à l'autre, hehe.
la source
Vous devez utiliser l'
isNaN(value)
appel de fonction globale , car:Exemples:
J'espère que cela t'aidera.
la source
isNaN('') //false
maisparseInt('') //NaN
. On peut en dire autantnull
.Depuis ES6 ,
Object.is(..)
est un nouvel utilitaire qui peut être utilisé pour tester deux valeurs d'égalité absolue:la source
Pour résoudre le problème où
'1.2geoff'
l'Number()
analyse est effectuée , utilisez simplement l' analyseur à la place.Donc plutôt que ça:
Faites ceci:
EDIT: Je viens de remarquer un autre problème à partir de cela cependant ... de fausses valeurs (et vraies comme un vrai booléen) sont passées en
Number()
retour comme0
! Dans ce cas ... parseFloat fonctionne à chaque fois à la place. Revenons donc à cela:Et cela couvre apparemment tout. Je l'ai comparé à 90% plus lentement que lodash,
_.isNaN
mais celui-ci ne couvre pas tous les NaN:http://jsperf.com/own-isnan-vs-underscore-lodash-isnan
Juste pour être clair, le mien s'occupe de l'interprétation littérale humaine de quelque chose qui n'est "pas un nombre" et lodash's s'occupe de l'interprétation littérale informatique de vérifier si quelque chose est "NaN".
la source
Bien que la réponse de @chiborg soit correcte, il y a plus à noter:
Le fait étant que si vous utilisez cette méthode pour valider la saisie, le résultat sera plutôt libéral.
Donc, oui, vous pouvez utiliser
parseFloat(string)
(ou dans le cas de nombres entiersparseInt(string, radix)
'et ensuite envelopper avecisNaN()
, mais soyez conscient du gotcha avec des nombres entrelacés avec des caractères non numériques supplémentaires.la source
parseFloat('test1.2')
reviendraNaN
.Solution simple!
VRAIMENT super simple! Ici! Ayez cette méthode!
Utilisez aussi simple que:
Exemple:
Il y a quelques chemins alternatifs que vous prenez pour l'implémentation, si vous ne voulez pas utiliser une méthode nommée alternativement, et que vous souhaitez vous assurer qu'elle est plus globalement disponible. Attention Ces solutions impliquent de modifier des objets natifs et peuvent ne pas être votre meilleure solution. Soyez toujours prudent et sachez que d'autres bibliothèques que vous pourriez utiliser peuvent dépendre du code natif ou de modifications similaires.
Autre implémentation 1: remplacer la
isNaN
méthode native .Mise en œuvre alternative 2: Ajouter à l'objet numérique
* Suggéré car il s'agit également d'un poly-remplissage pour ECMA 5 à 6
Test de solution alternative si vide
Une méthode de fenêtre simple, j'ai écrit ce test si l'objet est vide . C'est un peu différent dans la mesure où il ne donne pas si l'élément est "exactement" NaN , mais j'ai pensé que je mettrais cela en place car cela peut également être utile lorsque vous recherchez des éléments vides.
Exemple:
Afficher l'extrait de code
Vérification extrêmement profonde s'il est vide
Ce dernier va un peu en profondeur, vérifiant même si un objet est plein d'objets vides. Je suis sûr qu'il a de la place pour des améliorations et des éventuelles fosses, mais jusqu'à présent, il semble pouvoir tout rattraper.
Afficher l'extrait de code
la source
isNaN
n'est PAS fiable. On m'a commenté là-bas et on m'a dit que cette question conviendrait mieux à ma réponse, la déplaçant ainsi ici. Il suffit juste de mettre sur quelque chose utile / utile il par rapport à cette question qui va apparaître sur une recherche Google de la question à,is it NaN?
. En passant, ma réponse serait plus précise plus souvent que la réponse sélectionnée.Je veux juste partager une autre alternative, ce n'est pas nécessairement mieux que les autres ici, mais je pense que cela vaut la peine d'être examiné:
La logique derrière cela est que tous les nombres sauf
0
etNaN
sont exprimés entrue
.J'ai fait un test rapide, et il fonctionne aussi bien
Number.isNaN
et se vérifie que faux. Tous les trois fonctionnent mieux queisNan
Les resultats
Peut devenir utile si vous voulez éviter la
isNaN
fonction cassée .la source
Si votre environnement prend en charge ECMAScript 2015 , vous souhaiterez peut-être utiliser
Number.isNaN
pour vous assurer que la valeur est vraimentNaN
.Le problème avec
isNaN
est que si vous utilisez cela avec des données non numériques, il y a peu de règles déroutantes (selon MDN) qui sont appliquées. Par exemple,Ainsi, dans les environnements pris en charge par ECMA Script 2015, vous souhaiterez peut-être utiliser
la source
isNaN
pourrait vous causer des ennuis et n'oubliez pas d'utiliserNumber.isNaN
dans les environnements ECMAScript 2015 :-)NaN en JavaScript signifie "Not A Number", bien que son type soit en fait un nombre.
Pour vérifier si une variable est de valeur NaN, nous ne pouvons pas simplement utiliser la fonction isNaN (), car isNaN () a le problème suivant, voir ci-dessous:
Ce qui se passe vraiment ici, c'est que myVar est implicitement contraint à un nombre:
Cela a du sens, car "A" n'est en fait pas un nombre. Mais ce que nous voulons vraiment vérifier, c'est si myVar a exactement la valeur NaN.
IsNaN () ne peut donc pas aider. Alors que devons-nous faire à la place?
Étant donné que NaN est la seule valeur JavaScript traitée de manière inégale, nous pouvons donc vérifier son égalité avec lui-même en utilisant! ==
Donc pour conclure , s'il est vrai qu'une variable! == elle-même, alors cette variable est exactement de valeur NaN:
la source
J'utilise la
isNaN
fonction de soulignement car en JavaScript:Au moins, soyez conscient de ce piège.
la source
undefined
serait-il un comportement incorrect? Il est vrai que ceundefined
n'est pas un nombre, n'est-ce pas?undefined
peut être quelque chose de différentNaN
, mais ce n'est toujours pas un nombre, doncisNaN(undefined)
devrait l'être (et l'est)true
Peut-être aussi ceci:
la source
Il semble que isNaN () ne soit pas pris en charge dans Node.js prêt à l'emploi.
J'ai travaillé avec
la source
la source
Regardez la documentation de Mozilla La propriété globale NaN est une valeur représentant Not-A-Numbe
La meilleure façon est d'utiliser 'isNaN ()' qui est une fonction intégrée pour vérifier NaN. Tous les navigateurs prennent en charge la façon ..
la source
La règle est:
Le problème de la fonction isNaN () est qu'elle peut retourner un résultat inattendu dans certains cas:
Une meilleure façon de vérifier si la valeur est vraiment NaN est:
la source
Selon IEEE 754, toutes les relations impliquant NaN sont évaluées comme fausses sauf! =. Ainsi, par exemple, (A> = B) = false et (A <= B) = false si A ou B ou les deux est / sont NaN.
la source
J'ai écrit cette réponse à une autre question sur StackOverflow où un autre vérifie quand
NaN == null
mais ensuite elle a été marquée comme doublon, donc je ne veux pas perdre mon travail.Regardez Mozilla Developer Network à propos
NaN
.Réponse courte
Utilisez-le simplement
distance || 0
lorsque vous voulez vous assurer que la valeur est un nombre correct ouisNaN()
pour le vérifier.Longue réponse
Le NaN (Not-a-Number) est un objet global bizarre en javascript fréquemment renvoyé lorsque certaines opérations mathématiques ont échoué.
Vous vouliez vérifier
NaN == null
quels résultatsfalse
. HovewerNaN == NaN
obtient même des résultats avecfalse
.Un moyen simple de savoir si une variable
NaN
est une fonction globaleisNaN()
.Un autre est
x !== x
vrai uniquement lorsque x est NaN. (merci de rappeler à @ raphael-schweikert)Mais pourquoi la réponse courte a fonctionné?
Découvrons-le.
Lorsque vous appelez,
NaN == false
le résultat estfalse
identique àNaN == true
.Quelque part dans les spécifications, JavaScript a un enregistrement avec toujours des valeurs fausses, qui comprend:
NaN
- Pas un numéro""
- chaîne videfalse
- un faux booléennull
- objet nulundefined
- variables non définies0
- numérique 0, dont +0 et -0la source
var xIsNaN = x !== x;
cela ne donne la vérité que si x l'estNaN
.Une autre solution est mentionnée dans la page parseFloat de MDN
Il fournit une fonction de filtre pour effectuer une analyse stricte
Et puis vous pouvez utiliser
isNaN
pour vérifier s'il estNaN
la source
La façon exacte de vérifier est:
la source
J'ai créé cette petite fonction qui fonctionne comme un charme. Au lieu de vérifier NaN qui semble contre-intuitif, vous recherchez un nombre. Je suis sûr que je ne suis pas le premier à le faire de cette façon, mais j'ai pensé que je partagerais.
la source
Trouvé une autre façon, juste pour le plaisir.
la source
La réponse de marksyzm fonctionne bien, mais elle ne retourne pas faux
Infinity
car Infinity n'est techniquement pas un nombre.j'ai trouvé une
isNumber
fonction qui vérifiera s'il s'agit d'un nombre.MISE À JOUR: j'ai remarqué que ce code échoue pour certains paramètres, donc je l'ai amélioré.
la source
Ce n'est pas élégant. mais après avoir essayé isNAN (), je suis arrivé à cette solution qui est une autre alternative. Dans cet exemple, j'ai également autorisé "." parce que je me cache pour flotter. Vous pouvez également inverser cela pour vous assurer qu'aucun chiffre n'est utilisé.
Il s'agit d'une évaluation à un seul caractère, mais vous pouvez également parcourir une chaîne pour vérifier les nombres.
la source
Vous pouvez vérifier NaN en utilisant la fonction javascript isNaN. Passer simplement le nombre ou la valeur à la fonction isNaN
la source
Convertissez simplement le résultat en String et comparez avec 'NaN'.
la source
Est-ce que (NaN> = 0) ? ...... " Je ne sais pas ".
Les conditions ne s'exécutent que si VRAI .
Pas sur FAUX .
Pas sur " Je ne sais pas ".
la source