2013-09-27 7 views
16

zu überprüfen Ich habe Folgendes versucht, um für den Datentyp (speziell für Integer) zu überprüfen, aber nicht funktioniert.wie für den Datentyp in Knoten js- speziell für Integer

var i = "5"; 

if(Number(i) = 'NaN') 
{ 
console.log('This is not number')); 
} 
+0

haben u isNaN versucht? mögliches Duplikat http://stackoverflow.com/questions/175739/is-there-a-built-in-way-in-javascript-to-check-if-a-string-is-a-valid-number – Blacksonic

Antwort

28

Ich denke an zwei Möglichkeiten für den Typ eines Wertes zu testen:

Methode 1:

Sie können die JavaScript-Methode isNaN verwenden, die bestimmt, ob ein Wert NaN ist oder nicht. Da in Ihrem Fall jedoch ein numerischer Wert in eine Zeichenfolge konvertiert wird, versucht Javascript, den Typ des Werts zu erraten und konvertiert ihn in die Zahl 5, die nicht NaN ist. Deshalb, wenn Sie das Ergebnis console.log aus, Sie, dass der Code überrascht sein:

if (isNaN(i)) { 
    console.log('This is not number'); 
} 

wird nichts zurück. Aus diesem Grund ist eine bessere Alternative wäre die Methode 2.

Methode 2:

Sie können Javascript typeof Methode verwenden, den Typ einer Variablen oder Wert

if (typeof i != "number") { 
    console.log('This is not number'); 
} 

Hinweis zu testen, dass ich verwende den doppelten Operator, da in diesem Fall der Typ des Wertes eine Zeichenkette ist, aber Javascript intern in Zahl konvertiert wird.

Eine robustere Methode, um den Wert auf den numerischen Typ zu erzwingen, ist die Verwendung von Number.isNaN, die Teil des neuen Vorschlags für Ecmascript 6 (Harmony) ist und daher nicht weit verbreitet und von verschiedenen Anbietern vollständig unterstützt wird.

+0

Noch besser 'typeof i! =" Number "'. – SeinopSys

4

ich habe es auf diese Weise verwendet und seine adaequat

quantity=prompt("Please enter the quantity","1"); 
quantity=parseInt(quantity); 
if (!isNaN(quantity)) 
{ 
    totalAmount=itemPrice*quantity; 

} 
return totalAmount; 
+0

siehe Dieser Code und ändern Sie Ihren Code ... –

+0

+1 für eine Rückgabeanweisung mitten in einer If/Else-Klausel. Cuz, wer braucht Sprachregeln, oder? ANARCHIE! – deepelement

2

Ihre Logik korrekt ist, aber Sie haben zwei Fehler anscheinend jeder verpasst:

nur ändern if(Number(i) = 'NaN') zu if(Number(i) == NaN)

NaN eine Konstante ist, und Sie sollten Doppel Gleichheitszeichen verwenden zu vergleichen, eine einzelne ist verwendet, um Variablen Werte zuzuweisen.

3

Ich habe gerade einige Tests in node.js V4.2.4 (aber das ist in jeder JavaScript-Implementierung true):

> typeof NaN 
'number' 
> isNaN(NaN) 
true 
> isNaN("hello") 
true 

die Überraschung ist der erste, der als Art von NaN ist "Nummer", aber So ist es in Javascript definiert.

Also das nächste Test bringt unerwartetes Ergebnis bis

> typeof Number("hello") 
"number" 

weil Nummer ("Hallo") ist NaN

ergibt sich folgende Funktion macht wie erwartet:

function isNumeric(n){ 
    return (typeof n == "number" && !isNaN(n)); 
} 
1

Sie können versuchen, dieses isNaN(Number(x)) wo x ist irgendein Ding wie Schnur oder Zahl

0

Wenn Sie wissen wollen, ob „1“ ou 1 zu einer Reihe gegossen werden, können Sie diesen Code verwenden:

if (isNaN(i*1)) { 
    console.log('i is not a number'); 
} 
Verwandte Themen