Comment vérifier si un nombre JavaScript est un véritable, numéro valide?
MON code est:
function isNumber(n){
return typeof n == 'number' && !isNaN(n);
}
window.onload=function(){
var a=0,b=1,c=2.2,d=-3,e=-4.4,f=10/3;
var shouldBeTrue=[a,b,c,d,e,f];
var aa="0",bb="1",cc="2.2",dd="-3",ee="-4.4",ff="10/3";
var shouldBeFalse=[aa,bb,cc,dd,ee,ff];
var aaa,bbb=true,ccc=false,ddd=document.getElementsByTagName('html');
var alsoTheseBeFalse=[aaa,bbb,ccc,ddd,""," ",,null,NaN];
for(var i=0;i<shouldBeTrue.length;i++)
if(isNumber(shouldBeTrue[i]) != true) alert("x");
for(i=0;i<shouldBeFalse.length;i++)
if(isNumber(shouldBeFalse[i]) != false) alert("x");
for(i=0;i<alsoTheseBeFalse.length;i++)
if(isNumber(alsoTheseBeFalse[i]) != false) alert("x");
}
Que dois-je vérifier pour assurer ma fonction est de 101% parfait de toutes les façons? (aussi, si vous connaissez une meilleure fonction de s'il vous plaît dites-moi)
- la fonction vous êtes à la recherche pour le rendre parfait? Vous pourriez commencer par donner vos variables de noms plus significatifs...
- Il parle de la
isNumber(n)
fonction. - Il y avait numérique des cas, vous n'avez pas vérifier, mais je ne peux pas faire de votre fonction pause (ie: g=2E30, gg=0/0)
- bien 0/0=NaN (et je n'ai vérifier pour ça), mais je suis curieux à propos de la "2E30' chose, car il renvoie la valeur true. Savez-vous pourquoi elle retourne vrai?
- Note de côté, à l'intérieur de votre cas de test, vous utilisez
!= false
. Ce n'est pas nécessaire, parce que votreisNumber
fonction retourne toujours une valeur booléenne (true
oufalse
). Dansif ( ... )
, une des expressions est toujours treathed comme une valeur booléenne.if (isNumber(a) != false)
est équivalent àif (isNumber(a) == true)
est équivalent àif (isNumber(a))
.
Vous devez vous connecter pour publier un commentaire.
Si vous voulez vérifier si un nombre est un nombre réel, vous devriez également vérifier si elle est finie:
Une autre méthode (explication ci-dessous):
Mise à jour: Deux expressions de valider un nombre réel
Depuis JavaScript nombres représentent des nombres réels, la soustraction opérande sur le même numéro doit produire de la valeur zéro (additif d'identité). Les numéros de plage doit être (et sera) non valide,
NaN
.Infinity
. Il passe les deux premiers tests, alors il n'est pas utile de nombre réel:isNumber(Infinity)
retourne true pour votre fonction actuelle.var n=2E30;
?isNumber(n)
fonction est parfait . Aucune variable de la contrainte et de tout ce que typique gâchis de javascript, pas destring
, pas de"1"
, pas detrue
, pas de"true"
, pas deNaN
, pas denull
, pas de1/0
.n
doit simplement être un fini valide nombre (entier ou flottant). Et0
retourne vrai qu'il devrait l'être.JS numéros peut être parmi les valeurs suivantes:
+Infinity
et-Infinity
NaN
Puis il y a aussi des non-nombre de valeurs de contrainte de chiffres, par exemple en nombre d'objets. Vous pourriez envisager de leur numériques.
Si vous ne voulez tester finie de nombres, il suffit d'utiliser
Nombre.isFinite
:JS:
Si vous souhaitez inclure les infinis, vérifiez le type et exclure
NaN
:JS:
Si vous souhaitez prendre en compte le nombre d'objets que les numéros, vous pouvez déballer à l'aide de
JS:
Si vous souhaitez inclure des valeurs arbitraires contrainte de numéros, vous pouvez utiliser le unaire
+
à contraindre.Il y a aussi le
isNaN
fonction (à ne pas confondre avecNumber.isNaN
), qui sera la première à contraindre et à comparer ensuite avecNaN
. Mais être conscient des espaces de cordes et denull
sont contraints à+0
, pasNaN
. De sorte que vous pourriez être intéressé par Valider les nombres décimaux en JavaScript - IsNumeric()Cela dépend de ce que vous souhaitez à considérer comme un nombre. Votre code de classe de l'Infini et -Infini comme des nombres. Si vous ne voulez pas cela, remplacer !isNaN(n) par isFinite(n).
Et votre code classe '42" (un littéral de chaîne) comme n'étant pas un nombre, en raison de la vérification de type; mais je suppose que c'est volontaire.
Je utiliser la combinaison d'analyser et de vérifier les numéros.. comme indiqué ci-dessous
function isNumber(inputValue){
return ((parseFloat(inputValue) ==0 || parseFloat(inputValue)) && !isNaN(inputValue));
};
espère que cette aide
Si vous envisagez un certain nombre dans son objet wrapper pour être un certain nombre, il échouera avec:
Depuis un downvoter est d'avoir une meilleure compréhension des troubles qui n'a pas pu être atténué par un simple test,
new Number(123)
sera de retour'object'
de latypeof
de test, et en tant que tel ne passe pas.new Number(123)
va passer laisNumber
test dans la question.