Null, Undefined und NaN in JavaScript

14. August 2016 um 16:22 Uhr von Wolfgang Stengel zu JavaScript
JavaScript hat ein paar aussergewöhnliche Variablen-Zustände, die, wenn man JavaScript nur ab und zu einsetzt, einem immer wieder Kopfzerbrechen bereiten. Man möchte nur kurz einen Wert im DOM ändern oder eine Plausibilitätsprüfung einbauen, wird aber von dem lustigen kleinen gelben Ausrufezeichen links unten im Browser geärgert. Hier eine kurze Zusammenfassung wie man null, undefined und NaN ausseinanderhält und zuverlässig darauf prüft.

Der Wert null wird relativ selten von JavaScript-Operationen selbst erzeugt. Er kann jedoch dazu verwendet werden einen "leeren" Zustand einer Variablen zu markieren. Darauf lässt sich leicht mit dem Operator === prüfen:
var leer=null;
if (leer===null) { ... }
Der Wert undefined schlägt einem schon öfter entgegen, unter anderem wenn eine Variable nicht deklariert ist, ein Funktionsparameter nicht übergeben wird oder eine nicht existierende Objekt-Eigenschaft abgefragt wird. Kurz gesagt ist undefined das Pendant zu NULL in PHP. Zuverlässig prüfen lässt sich darauf, ohne einen Laufzeitfehler zu erzeugen, nur mit typeof():
if (typeof(unbekanntevariable)=="undefined") { ... }
Wenn es um Objekteigenschaften oder bereits sicher deklarierte Variablen geht, funktioniert auch der direkte Vergleich (ohne Quotes):
var ob={};
if (ob.unbekannteeigenschaft==undefined) { ... }
var leer;
if (leer==undefined) { xxx }
Damit lassen sich auch optionale Funktionsparameter mit Defaultwert erzeugen:
function alertNumber(number)
{
    if (number==undefined) number=0; // Gibt 0 aus wenn Argument nicht gegeben wurde
    alert(number);
}
In der ersten Variante würde if (unbekanntevariable==undefined) { ... } nicht funktionieren, da bereits vor dem Vergleich, nämlich beim Auswerten von unbekanntevariable, ein Laufzeitfehler ausgelöst wird.

Den Wert NaN (Not a Number) spuckt JavaScript immer dann aus wenn ein Wert, der keine Zahl ist, in einem numerischen Zusammenhang verwendet wird. Es gibt zwar die Funktion isNaN(), diese prüft aber nicht nur auf den konkreten Wert NaN, sondern gibt auch true für z.B. isNaN("foo") zurück. Auf den konkreten Wert NaN lässt sich nur mit einem Trick prüfen:
var num=parseInt("Hallo");
if (typeof(num)=="number" && num+""=="NaN") { ... }
In verschiedenen Foren findet man immer wieder Tipps auf null, undefined oder NaN mit einem simplen if (variable) { ... } zu prüfen, was aber z.B. bei einem Integer mit Wert 0 oder einem Leerstring nicht funktioniert.
PHP Wolfgang Stengel