2014-06-06 18 views
6

Warum ist die Funktion isNaN in nodejs in den folgenden Fällen false?Funktion isNaN in nodejs

isNaN(''),isNaN('\n'),isNaN('\t') 

das ist sehr seltsam.

hat jemand irgendwelche Ideen, wie ich dachte, isNaN stand für ist keine Nummer.

kann jemand bitte klären

Vielen Dank im Voraus!

Antwort

11

gegeben ist, weil Sie nicht es eine Reihe vorbei, wird es wandle es in Zahl um. Alle, die von zu 0 konvertieren, welche 0 und NaN nicht

Number('') 
0 
Number('\n') 
0 
Number('\t') 
0 
isNaN(0) 
false 

Beachten Sie, dass NaN nicht für „kein JavaScript Number“ nicht ausstehen. In fact it's completely separate from JavaScript und existiert in allen Sprachen, die IEEE-754-Floats unterstützen.

Wenn Sie überprüfen wollen, ob etwas eine Javascript Zahl ist, ist die Prüfung

if (typeof value === "number") { 

} 
+3

Beachten Sie, dass der Wert 'NaN' eine Javascript-Nummer ist =>' typeof NaN === 'Nummer' // true' – mjlescano

0

isNaN ist ein „ist keine Zahl“ Funktion, es ist wahr zurück, wenn keine Nummer als Parameter geben werden, und falsch, wenn eine Zahl

+0

Ich vermute, dass Sie "falsch" sagen wollten, wenn eine Nummer angegeben wird. Vielleicht möchten Sie Ihre Antwort bearbeiten, um sie zu korrigieren. –

3

NaN eine sehr spezielle Sache ist: es ist ein Fließkommawert, der die entsprechenden NaN Flags gesetzt, gemäß dem IEEE754 hat Spezifikation (Wikipedia article). Wenn Sie überprüfen möchten, ob eine Zeichenfolge einen numerischen Wert enthält, können Sie parseFloat(str) (MDN on parseFloat) verwenden. Wenn kein gültiger numerischer Inhalt gefunden wird oder vor dem Suchen nach Zahlen ungültige Zeichen gefunden werden, wird ein NaN-Wert zurückgegeben.

So versuchen Sie isNaN(parseFloat(str)) - es gibt mir true für alle drei Beispiele geschrieben.

+0

yup das ist was ich benutze aber es wäre einfacher gewesen wenn isNaN den Trick gemacht hätte .. – azero0

+0

@ A-0-: isNaN hat einen bestimmten Zweck; Nachweis von NaN-Werten gemäß IEEE754-Spezifikation Es gibt dort keine allgemeine numerische Prüfung, die hauptsächlich in parseFloat durchgeführt wird, deren Aufgabe es ist, Zahlen aus Strings zu konstruieren. Wir verwenden hier nur isNaN, weil parseFloat einen NaN-Wert zurückgibt, wenn es fehlschlägt; Wenn es einen Fehler gegeben hätte, würden wir isNaN nicht verwenden. Verwechseln Sie isNaN nicht mit einer Art von isNumeric - isNaN arbeitet nur mit numerischen Werten, nicht mit Strings und prüft auf einen bestimmten Werttyp. –

3

isNan() wurde entwickelt, um Dinge zu finden, die "mathematisch undefiniert" sind - z. 0/0 -

node 
> isNaN(0/0) 
true 
> isNaN(1/0) 
false 
> isNaN(Math.sqrt(-1)) 
true 
> isNaN(Math.log(-1)) 
true 

Die anderen Ratschläge, die Sie hier in dieser Frage standen, wie Zahlen zu erkennen sind solide.

Verwandte Themen