
JavaScript hat ein paar merkwürdige Variablen-Zustände, die, wenn man JavaScript so wie ich nur ab und zu einsetzt, einem immer wieder starkes 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. Da ich davon jetzt die Schnauze voll habe, habe ich mich hingesetzt und mich endlich einmal damit ausseinandergesetzt 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 Variablen nicht initialisiert werden, 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 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) { ... }
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 der JavaScript-Fehler bereits vor dem Vergleich, nämlich beim Auswerten von
unbekanntevariable 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. Darauf lässt sich zuverlässig nur mit einem kleinen Hack 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.