J'ai essayé ce qui suit pour vérifier le type de données (spécifiquement pour l'entier), mais ne fonctionne pas.
var i = "5";
if(Number(i) = 'NaN')
{
console.log('This is not number'));
}
Je pense à deux manières de tester le type d'une valeur:
Méthode 1:
Vous pouvez utiliser la méthode javascript isNaN
, qui détermine si une valeur est NaN ou non. Mais parce que dans votre cas, vous testez une valeur numérique convertie en chaîne, Javascript essaie de deviner le type de la valeur et le convertit au nombre 5, qui n'est pas NaN
. C'est pourquoi, si vous console.log
z le résultat, vous serez surpris de constater que le code:
if (isNaN(i)) {
console.log('This is not number');
}
ne retournera rien. Pour cette raison, une meilleure alternative serait la méthode 2.
Méthode 2:
Vous pouvez utiliser la méthode javascript typeof pour tester le type d’une variable ou d’une valeur.
if (typeof i != "number") {
console.log('This is not number');
}
Notez que j'utilise un opérateur double égal, car dans ce cas, le type de la valeur est une chaîne, mais Javascript est converti en interne en nombre.
Une méthode plus robuste pour forcer la valeur au type numérique consiste à utiliser Number.isNaN , qui fait partie de la nouvelle proposition Ecmascript 6 (Harmony). Elle n'est donc pas généralisée et entièrement prise en charge par différents fournisseurs.
je l'ai utilisé de cette façon et ça fonctionne bien
quantity=Prompt("Please enter the quantity","1");
quantity=parseInt(quantity);
if (!isNaN( quantity ))
{
totalAmount=itemPrice*quantity;
}
return totalAmount;
Je viens de faire quelques tests dans node.js v4.2.4 (mais cela est vrai dans n'importe quelle implémentation javascript):
> typeof NaN
'number'
> isNaN(NaN)
true
> isNaN("hello")
true
la surprise est la première puisque le type de NaN est "nombre", mais c'est ainsi qu'il est défini en javascript.
Donc, le prochain test apporte un résultat inattendu
> typeof Number("hello")
"number"
parce que Number ("hello") est NaN
La fonction suivante donne les résultats escomptés:
function isNumeric(n){
return (typeof n == "number" && !isNaN(n));
}
Votre logique est correcte mais vous avez apparemment 2 erreurs que tout le monde a ratées:
remplacez simplement if(Number(i) = 'NaN')
par if(Number(i) == NaN)
NaN
est une constante et vous devriez utiliser les signes double égalité pour comparer, un seul sert à affecter des valeurs aux variables.
vous pouvez essayer celui-ci isNaN(Number(x))
où x est une chose comme chaîne ou nombre
Si vous voulez savoir si "1" ou 1 peut être converti en un nombre, vous pouvez utiliser ce code:
if (isNaN(i*1)) {
console.log('i is not a number');
}