Der Wert NaN in JavaScript (Der Wert NaN in JavaScript), Lektion, Seite 723433
https://www.purl.org/stefan_ram/pub/nan_javascript (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
JavaScript-Kurs

Der Wert «NaN» in JavaScript 

«NaN» ist ein „Fluchtwert“, das heißt er hat den Typ »number« („Zahl“), aber die Bedeutung “not a number ” (also „keine Zahl“).

Wie auch schon »Infinity« und »undefined«, so ist auch »NaN« ein Eintrag des globalen Verzeichnisses »this« mit einem gleichnamigen Wert «NaN».

Auswertung
typeof this.NaN
"number"

Der Wert «NaN» scheint zunächst widersprüchlich zu sein, da “NaN ” eine Abkürzung für “not a number ” (deutsch „keine Zahl“) darstellt, aber der Typ von «NaN» »number« (deutsch „Zahl“) ist.

Der scheinbare Widerspruch löst sich auf, wenn man bedenkt, daß den beiden Bezeichnungen zwei verschiedene Definitionen des Wortes “number ” zugrundeliegen. Das “not a number ” (deutsch „keine Zahl“) von »NaN« besagt, daß es sich nicht um eine Zahl im Sinne der Schulmathematik  handelt. Der Typ »number« besagt, daß es sich um eine „Zahl“ (englisch “number ”) im Sinne des Typsystems der Programmiersprache JavaScript  handelt.

Der Wert «NaN» ergibt sich bei manchen Berechnungen, für die kein anderes Ergebnis sinnvoll ist, wie in den folgenden Beispielen.

«NaN» bedeutet, daß der Wert des Ergebnisses nicht als Zahl dargestellt werden kann. Der Typ des Wertes «NaN» ist aber »number«, damit man die Typregel „number - number = number“ ohne Ausnahme gilt. (Wenn zwei Werte vom Typ »number« subtrahiert werden, ergibt sich wieder ein Wert vom Typ »number«.)

Auswertung
this.Infinity - this.Infinity
NaN
Auswertung
this.NaN + 1
NaN

Das folgende Beispiel zeigt, daß ein Numerale in einem String nicht mehr als Zahl interpretiert wird, wenn es mehr als ein Vorzeichen enthält.

Auswertung
-"--65"
NaN

Das folgende Beispiel zeigt, daß ein Numerale in einem String kein Leerzeichen nach dem Vorzeichen enthalten darf.

Auswertung
-"- 65"
NaN

Eine Rechenoperation, bei der ein Operand «undefined» ist, ergibt immer «NaN». Dies liegt daran, daß Rechenoperationen normalerweise eine Zahl ergeben, und »NaN« die Abwesenheit einer normalen Zahl kennzeichnet.

Auswertung
1 + undefined
NaN

Die Wandlung einer nicht-numerischen Zeichenfolge in eine Zahl ergibt «NaN».

Auswertung
+"a"
NaN

Wir können eine numerische Zeichenfolge umgekehrt dadurch definieren, daß ihre Wandlung in eine Zahl mit dem Vorzeichenoperator »+« nicht  «NaN» ergibt.

Ein Vergleich einer Zahl mit einer nicht-numerischen Zeichenfolge ergibt stets «false», da ein Vergleich mit «NaN» stets «NaN» ergibt.

Auswertung
NaN === NaN
false
Auswertung
+'abc'
Nan
Auswertung
2 < 'abc'
false

Metazahlen ⃗

Wir nennen »NaN« eine uneigentliche Zahl  und die anderen bisher behandelten Zahlen eigentliche Zahlen. Die eigentlichen und uneigentlichen Werte fassen wir als Metazahlen  zusammen.

Wir geben im folgenden die behandelten Arten von Metawerten wieder.

Arten von Werten
Metawerte
- uneigentliche Werte («undefined»)
- eigentliche Werte
- Fundamentalwerte
- Metazahlen
- uneigentliche Zahlen («NaN»)
- eigentliche Zahlen
- Zeichenfolgen
- Wahrheitswerte
- Verzeichnisse

Vergleiche

Der Wert «this.NaN» gilt als ungleich zu jedem Wert, einschließlich seiner selbst!

Auswertung
this.NaN === this.NaN
false

«-this.Infinity» ist kleiner als jeder andere Zahlenwert außer «this.NaN».

Auswertung
-this.Infinity < -1000
true
Auswertung
-this.Infinity < this.NaN
false

Auch nach Vertauschung der Operanden ergibt sich »false«. Vielleicht wäre hier das Ergebnis »undefined« sinnvoller, jedoch soll ein Vergleich anscheinend immer einen Wahrheitswert ergeben.

Auswertung
this.NaN < -this.Infinity
false

Bei einem Vergleich einer Zeichenfolge mit einer Metazahl wird die Zeichenfolge in eine Metazahl gewandelt. Eine Zeichenfolge wie »!«, die nicht als Numerale interpretiert werden kann, wird dabei in «this.NaN» gewandelt.

Auswertung
"!" < 1
false
Auswertung
1 < "!"
false

Übersicht

In der folgenden Übersicht steht »this« für das globale Verzeichnis.

Übersicht der Namen

Name Art Bedeutung

this.Infinity Zahl Unendlich
this.Math.PI Zahl die Kreiszahl Pi
this.undefined Wert "kein Wert"
this.NaN Zahl "keine Zahl"

Übungsfragen

?   Übungsfragen

Warum ergibt der folgende Vergleich »true«?

Ausdruck
this.Math.NaN === this.Math.NaN
true

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram723433 stefan_ram:723433 Der Wert NaN in JavaScript Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd723433, slrprddef723433, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/nan_javascript