was ist das reservierte Schlüsselwort für NaN in Javascript?
-
05-09-2019 - |
Frage
Wenn ich will, das Ergebnis eines Ausdrucks testen und die Funktion zurückkehren würde NaN
Wie würde ich das überprüfen?
Beispiele:
$('amount').value.toInt()!='NaN'
^ funktioniert nicht und ich nehme an, dass der zurückgegebene Wert kein String ist
$('amount').value.toInt()!=NaN
^ scheint nicht entweder und dieser scheint offensichtlich
zu arbeiten
so wie kann ich überprüfen, ob der zurückgegebene Wert keine Zahl ist?
Lösung
Der Wert NaN ist so definiert, alles ungleich zu sein, einschließlich sich selbst. Prüft, ob ein Wert NaN mit dem isNaN()
Funktion, passend genug. (ECMAScript 6 fügt einen Number.isNan()
Funktion mit unterschiedlicher Semantik für nicht-Zahl Argumente, aber es ist nicht in allen Browsern noch ab 2015).
Es gibt zwei integrierten Eigenschaften zur Verfügung mit einem NaN Wert: die globale NaN
Eigenschaft (dh window.NaN
in Browsern) und Number.NaN
. Es ist nicht eine Sprache Schlüsselwort. In älteren Browsern könnte die NaN
Eigenschaft überschrieben, mit potentiell verwirrenden Ergebnissen, aber mit der ECMAScript 5-Norm es gemacht wurde nicht beschreibbaren .
- Wie @some in den Kommentaren darauf hingewiesen, gibt es auch die globale Funktion = "nofollow noreferrer"> isFinite (), die nützlich sein können.
Andere Tipps
der beste Weg, das Ergebnis der numerischen Operation gegen NaN zu überprüfen ist, auf diese Weise aproach, Beispiel:
var x = 0;
var y = 0;
var result = x/y; // we know that result will be NaN value
// to test if result holds a NaN value we should use the following code :
if(result !=result){
console.log('this is an NaN value');
}
und es gemacht wird.
Der Trick besteht darin, dass NaN kann nicht auf einen anderen Wert verglichen werden, auch mit ihm selbst (NaN! = NaN ist immer wahr, so können wir dies nutzen und vergleichen Sie führen gegen sich selbst)
Das ist JavaScript (eine gute und bizarre Sprache)
Gleichheits-Operator (== und ===) kann keinen Wert testen gegen NaN verwendet werden. Verwenden Sie Number.isNaN () oder isNaN () statt.
NaN === NaN; // false
Number.NaN === NaN; // false
isNaN(NaN); // true
isNaN(Number.NaN); // true