sschumann: Was bedeutet dieser Code?

Beitrag lesen

if (!variable)
Bißchen Humbug. Das Vorhandensein einer Variable überprüft man mit einem Test gegen null. Das gleiche gilt für Methoden, Properties und Objekte.

Ahhhhh, nein auch das nicht.
Eine nicht definierte Variabel hat KEINEN wert - auch nicht null.

eine nicht definierte Variabel prüft man mit dem typeof operator.
und if(!x) prüft auch auf Strings Zahlen oder Objekte.

Nun aber richtig: in JS<1.1 kann man nur gegen null prüfen. Dies knallt, wenn man direkt eine nicht deklarierte Variable abfragt. Fragt man sie hingegen als Eigenschaft des window-Objekts ab, klappt's. Genauso gibt's keine Probleme bei Unterobjekten etc.
In JS>=1.1&&JS<1.3 gibt's typeof. Hier kann man mit typeof prüfen, ob die Variable vorhanden ist bzw. ob sie noch keinen Wert zugewiesen bekommen hat. Eine Unterscheidung gibt's hier nicht.
Ab JS 1.3 kann ich mit einem kleinen Trick unterscheiden, ob sie nicht deklariert wurde, oder ob sie deklariert wurde, aber ihr kein Wert zugewiesen wurde:

var keinwertzugewiesen;

if (typeof nichtda == 'undefined') {
    if (window.nichtda === keinwertzugewiesen)
        alert("da, aber kein wert zugewiesen");
    else
        alert("nicht da");
}

Dennoch halte ich es für fraglich, ob der Test gegen null deprecated ist. Und einen ! gegen null habe ich schon in die Hose gehen sehen (bei einer der allseits beliebten Prüfungen auf document.all etc.)