★ wanayoo — archive 1999 https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/isNaNNouvelle recherche | Portail wanayoo

isNaN()

von 2 Mitwirkenden:

Dieser Artikel benötigt eine technische Überprüfung.

Diese Übersetzung ist unvollständig. Bitte helfen Sie, diesen Artikel aus dem Englischen zu übersetzen.

Zusammenfassung

Die isNaN() Methode prüft, ob ein Wert NaN ist.
Bemerkung: Aufgrund innerer Zwänge weist die isNaN Methode interessante Regeln auf. Alternativ kann die in ECMAScript 6 definierte Methode Number.isNaN() genutzt werden oder man kann mit typeof feststellen, ob der Wert nicht vom Typ number ist.

Syntax

isNaN(testWert)

Parameter

testWert
Der zu testende Wert.

Beschreibung

Die notwendigkeit einer isNaN Methode

Anders als bei allen anderen Werten in JavaScript, ist es nicht möglich mit den Gleichheitsoperatoren (== and ===) zu prüfen, ob ein Wert NaN ist oder nicht. NaN == NaN and NaN === NaN werden zu false ausgewertet. Aus duesen Grund wird eine isNaN Methode benötigt. 

Ursprünge des NaNWertes

NaN Werte werden generiert, wenn das Ergebnis einer arithmetischen Operation ein undefinierte Werte oder ein nicht repräsentierbare Werte ist. Diese Werte entsprechen nicht unbedingt dem Überlauf von Wertebereichen. Ein NaN Ergebnis kann ebenfalls entstehen, wenn es für eine Operation keine primitive Zahl als darstellung gibt.

Ein Beispiel ist, wenn null durch null geteilt wird. Das Ergebnis ist NaN. Jedoch ist das Ergebnis nicht NaN wenn andere Zahlen durch null geteilt werden.

Verwirrende Spezialfälle

Schon seit den frühesten Versionen der isNaN Methodendefinition ist das Verhalten für nicht numerische Typen nicht trivial. Wenn der zu überprüfende Wert nicht vom Typ Number ist, so wird dieser Wert zuerst in den Typ Number konvertiert. Erst dann wird geprüft, ob der Wert NaN ist. Weil einige nicht numerischen Werte trotzdem als Zahlen interpretiert werden können (der leerer String und Werte vom Typ boolean können als Nullen und Einsen dargestellt werden) ist das false-Resultat der Funktion manchmal unerwartet. Der leere Sting ist ein Beispiel dafür, weil dieser definitif keine Nummer ist. Das verwirrende ist jedoch dass "not a number" eine spezielle Repräsentation in den IEEE-754 Gleitkommazahlen besitet. Aus diesem Grund kann die Methode so interpretiert werden, dass sie die Antwort auf die Frage gibt, ob ein Wert, der als Nummer interpretiert wird, eine IEEE-754 'Not a number' ist.

In der nächsten Verson von ECMAScript (ES6) gibt es die Methode Number.isNaN(). Number.isNaN(x) wird eine zuverlässiger Möglichkeit sein um zu testen ob x den Wert NaN trägt oder nicht. Mit Number.isNaN wird exakt abgefragt, ob es sich um eine Nummer handelt. Eine Alternative zu testen ob eine Variable NaN ist, ist dei Abfrage  (x != x). Diese wird im normalfall zu false ausgewertet, ausßer wenn der wert NaN ist.

Examples

isNaN(NaN);       // true
isNaN(undefined); // true
isNaN({});        // true

isNaN(true);      // false
isNaN(null);      // false
isNaN(37);        // false

// strings
isNaN("37");      // false: "37" wird in die Nummer 37 konvertiert welche nicht NaN ist
isNaN("37.37");   // false: "37.37" wird in die Nummer 37.37 konvertiert welche nicht NaN ist
isNaN("");        // false: der leere String wird zu 0 konvertiert welche nicht NaN ist
isNaN(" ");       // false: ein String mit leerzeichen wird zu 0 konvertiert welche nicht NaN ist

// dates
isNaN(new Date());                // false
isNaN(new Date().toString());     // true

// Dieses ist das Beispiel, warum isNaN nicht zuverlässig ist.
isNaN("blabla")   // true: "blabla" wird zu einer Nummer konvertiert 
                  // Das Konvertieren schlägt fehl und gibt NaN zurück

Spezifikationen

Spezifikation Status Kommentar
ECMAScript 1st Edition. Standard Initial definition.
ECMAScript 5.1 (ECMA-262)
Die Definition von 'isNaN' in dieser Spezifikation.
Standard  
ECMAScript 6 (ECMA-262)
Die Definition von 'isNaN' in dieser Spezifikation.
Anwärter Empfehlung  

Browserkompatibilität

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
Basic support (Ja) (Ja) (Ja) (Ja) (Ja)
Feature Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Basic support (Ja) (Ja) (Ja) (Ja) (Ja) (Ja)

Siehe auch

Schlagwörter des Dokuments und Mitwirkende

Mitwirkende an dieser Seite: zf2timo, schlagi123
Zuletzt aktualisiert von: zf2timo,
Seitenleiste ausblenden