web-dev-qa-db-fra.com

comment vérifier le type de données dans le noeud js - spécifiquement pour l'entier

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'));
}
22
Prem

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.logz 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.

39
Simo Endre

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;
6
Mayur Gupta

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));
}
3
Gustav Kusnir

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.

2
FKasa

vous pouvez essayer celui-ci isNaN(Number(x)) où x est une chose comme chaîne ou nombre

1
chaitanya

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'); 
}
0
Alain Beauvois