Signatur
Beschreibung
Die Funktion isNaN() bestimmt, ob ein Wert NaN ist und wandelt den Wert dabei bei Bedarf zunächst in eine Zahl um. Weil die Coercion innerhalb der isNaN()-Funktion überraschend sein kann, bevorzugen Sie eventuell die Verwendung von Number.isNaN().
isNaN() ist eine Funktionseigenschaft des globalen Objekts.
Für Number-Werte prüft isNaN(), ob die Zahl den Wert NaN hat. Wenn das Argument der isNaN()-Funktion nicht vom Typ Number ist, wird der Wert zunächst zu einer Zahl umgewandelt (coerced) und der resultierende Wert dann mit NaN verglichen.
Dieses Verhalten von isNaN() für nicht-numerische Argumente kann verwirrend sein! Zum Beispiel wird ein leerer String zu 0 umgewandelt, während ein Boolean zu 0 oder 1 umgewandelt wird; beide Werte sind intuitiv „keine Zahlen", ergeben aber nicht NaN, sodass isNaN() false zurückgibt. Daher beantwortet isNaN() weder die Frage „ist die Eingabe der Fließkomma-Wert NaN" noch die Frage „ist die Eingabe keine Zahl".
Number.isNaN() ist eine zuverlässigere Methode, um zu testen, ob ein Wert der Zahlenwert NaN ist oder nicht. Alternativ kann der Ausdruck x !== x verwendet werden, und keine der Lösungen unterliegt den Fehlalarmen, die das globale isNaN() unzuverlässig machen. Um zu testen, ob ein Wert eine Zahl ist, verwenden Sie typeof x === "number".
Die Funktion isNaN() beantwortet die Frage „ist die Eingabe funktional äquivalent zu NaN, wenn sie in einem Zahlenkontext verwendet wird". Wenn isNaN(x) false zurückgibt, können Sie x in einem arithmetischen Ausdruck verwenden, als wäre es eine gültige Zahl, die nicht NaN ist. Wenn isNaN(x) true zurückgibt, wird x zu NaN umgewandelt und die meisten arithmetischen Ausdrücke geben NaN zurück (weil sich NaN ausbreitet). Sie können dies zum Beispiel verwenden, um zu testen, ob ein Argument einer Funktion arithmetisch verarbeitbar ist (verwendbar „wie" eine Zahl) und um Werte, die nicht zahlenähnlich sind, zu behandeln, indem Sie einen Fehler werfen, einen Standardwert bereitstellen usw. Auf diese Weise können Sie eine Funktion haben, die die volle Vielseitigkeit nutzt, die JavaScript durch implizite Konvertierung von Werten je nach Kontext bietet.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $value Pflicht | any | — | Der zu prüfende Wert. |
Rückgabewert
true, wenn der übergebene Wert nach der Umwandlung in eine Zahl NaN ist; andernfalls false.Beispiele
Verwendung von isNaN()
isNaN(NaN); // true
isNaN(undefined); // true
isNaN({}); // true
isNaN(true); // false
isNaN(null); // false
isNaN(37); // false
// Strings
isNaN("37"); // false: "37" is converted to the number 37 which is not NaN
isNaN("37.37"); // false: "37.37" is converted to the number 37.37 which is not NaN
isNaN("37,5"); // true
isNaN("123ABC"); // true: Number("123ABC") is NaN
isNaN(""); // false: the empty string is converted to 0 which is not NaN
isNaN(" "); // false: a string with spaces is converted to 0 which is not NaN
// Dates
isNaN(new Date()); // false; Date objects can be converted to a number (timestamp)
isNaN(new Date().toString()); // true; the string representation of a Date object cannot be parsed as a number
// Arrays
isNaN([]); // false; the primitive representation is "", which converts to the number 0
isNaN([1]); // false; the primitive representation is "1"
isNaN([1, 2]); // true; the primitive representation is "1,2", which cannot be parsed as number
// Wichtig · Fallstricke
+-Operator führt sowohl Zahlenaddition als auch String-Konkatenation durch. Selbst wenn isNaN() für beide Operanden false zurückgibt, kann der +-Operator daher trotzdem einen String zurückgeben, weil er nicht als arithmetischer Operator verwendet wird. Zum Beispiel gibt isNaN("1") false zurück, aber "1" + 1 gibt "11" zurück. Um sicherzustellen, dass Sie mit Zahlen arbeiten, wandeln Sie den Wert in eine Zahl um und verwenden Sie Number.isNaN(), um das Ergebnis zu prüfen.