molily: Prüfen, ob Objekt vorhanden

Beitrag lesen

Hallo,

if (document.getElementById('fehlertext')) {
...
}

So hatte ich es ursprünglich. Läuft mit der Opera auch fehlerfrei, aber offenbar fehlerhaft mit dem IE 9 und IE 10.

Es sollte auch im IE 9 und 10 funktionieren. Was passiert denn dort? Sind Exceptions auf der Konsole zu sehen? Welche?

Deshalb habe ich recherchiert, wie man das Vorhandensein eines Objektes standardkonform abfragt. Und da wird immer typeof benutzt.

Das kann man so nicht sagen. Wie man das Vorhandensein eines Objektes abfragt, hängt vom individuellen Fall ab. Siehe dazu meinen Artikel Objektabfragen und Fallunterscheidungen in JavaScript.

Im deinem Falle hast du einfach einen Funktionsaufruf und du brauchst lediglich den Rückgabewert prüfen. Der Rückgabewert von getElementById ist entweder null oder ein Elementobjekt. Null ist falsy (= konvertiert zu false, wenn ein Boolean erwartet wird), ein Elementobjekt ist truthy (= konvertiert zu true, wenn ein Boolean erwartet wird). Daher funktioniert folgendes:

var el = document.getElementById('foo');  
if (el) {}

Wenn nicht, sollte die Ursache woanders liegen.

Dein Vorschlag (= mein alter Stand) müsste logischerweise zum Fehler führen, wenn document.getElementById('fehlertext') nicht vorhanden:

if (undefined)

Nein, das führt zu keinem Ausnahmefehler, der das Programm abbricht.

Bei solchen Abfragen gibt es hauptsächlich zwei Fälle, die einen Fehler auslösen:

  • Der Zugriff auf nicht deklarierte Variable
      if (nichtExistenteVariable) wirft einen ReferenceError: nichtExistenteVariable is not defined
  • Der Zugriff auf eine Eigenschaft von null/undefined
      window.nichtExistentesObjekt.eigenschaft wirft einen TypeError: Cannot read property 'eigenschaft' of undefined

Aber den Wert einer Expression/einer Variable zu prüfen, welche undefined oder null ist, wirft keine Exception.

Hatte ein vergleichbares Problem mit PHP. Nach Update auf eine neue Betriebssystem-Version poppten massig Warnungen auf, dass die Abfrage
if ($_POST['irgendwas'])

fehlerhaft ist. Richtig ist
if (defined("$_POST['irgendwas']"))

Ich glaube du suchst isset oder empty.

Grüße,
Mathias