Linuchs: Unverständlicher Javascript-Fehler wegen null

Moin,

ich bekomme diese Fehlermeldung in der Konsole:

TypeError: document.getElementById(...) is null (Zeile 91)

Die Zeile 91 ist die, in die das Programm eigentlich gar nicht hineinlaufen kann:

90 if ( typeof document.getElementById( "XMLHttpRequest_gesendet" ) !== "null" ) {
91   document.getElementById( "XMLHttpRequest_gesendet" ).innerHTML = url;
92 }

Es stellt also fest, dass ein Objekt ungleich null ist, um dann zu protestieren, dass es doch null ist. Welchen Sinn macht das?

Gruß, Linuchs

  1. Hallo,

    TypeError: document.getElementById(...) is null (Zeile 91)
    

    Die Zeile 91 ist die, in die das Programm eigentlich gar nicht hineinlaufen kann:

    oh doch, weil du etwas anderes geschrieben als gemeint hast.

    90 if ( typeof document.getElementById( "XMLHttpRequest_gesendet" ) !== "null" ) {
    91   document.getElementById( "XMLHttpRequest_gesendet" ).innerHTML = url;
    92 }
    

    Du prüfst da nicht auf den null-Wert, sondern auf exakte und typsichere Übereinstimmung mit dem String "null".

    EDIT: Ich würde in so einem Fall gar nicht mit typeof oder dem magischen Wert null rumhantieren, sondern sowas machen:

    90 if (el=document.getElementById("XMLHttpRequest_gesendet") {
    91   el.innerHTML = url;
    92 }
    

    Die if-Abfrage betrachtet sowieso alles als false, was null, 0, "0" oder "" ist. Und mit der Zuweisung an eine Hilfsvariable el erspare ich mir, das DOM zweimal nach genau demselben Element zu durchsuchen.

    Es stellt also fest, dass ein Objekt ungleich null ist, um dann zu protestieren, dass es doch null ist. Welchen Sinn macht das?

    Keinen.

    Ciao,
     Martin

    --
    Computer müssen weiblich sein: Eigensinnig, schwer zu durchschauen, immer für Überraschungen gut - aber man möchte sie nicht missen.
    1. Du prüfst da nicht auf den null-Wert, sondern auf exakte und typsichere Übereinstimmung mit dem String "null".

      Au ja, Tomaten auf den Augen oder selektive Wahrnehmung. Danke

  2. Tach!

    Die Zeile 91 ist die, in die das Programm eigentlich gar nicht hineinlaufen kann:

    90 if ( typeof document.getElementById( "XMLHttpRequest_gesendet" ) !== "null" ) {
    91   document.getElementById( "XMLHttpRequest_gesendet" ).innerHTML = url;
    92 }
    

    Warum soll es nicht dahinlaufen können? Welchen Wert gibt denn typeof document.getElementById( "XMLHttpRequest_gesendet" ) zurück? Hast du das nicht geprüft und einfach blind angenommen, dass da "null" zurückkommt? Die Ausgabe ist "object" und damit für deinen Fall unbrauchbar. null ist kein Typ sondern ein Wert.

    Es stellt also fest, dass ein Objekt ungleich null ist, um dann zu protestieren, dass es doch null ist. Welchen Sinn macht das?

    Das ist dein Wunsch, aber nicht das was du geschrieben hast. Wenn du auf null prüfen möchtest, musst du das direkt tun, ohne typeof.

    Besser fände ich aber

    const XMLHttpRequest_gesendet = document.getElementById("XMLHttpRequest_gesendet");
    if (XMLHttpRequest_gesendet) {
      XMLHttpRequest_gesendet.innerHTML = url;
    }
    

    Es reicht auf falsy zu prüfen. document.getElementById() gibt entweder ein Element oder null zurück, womit das Ergebnis eindeutig truthy oder falsy ist und eine einfache boolesche Auswertung reicht.

    Zudem muss man den Browser nicht zweimal durch das DOM schicken (selbst wenn er das eventuell wegoptimiert und einen Index für die IDs verwendet).

    dedlfix.

    1. Hallo

      Welchen Wert gibt denn typeof document.getElementById( "XMLHttpRequest_gesendet" ) zurück? Hast du das nicht geprüft und einfach blind angenommen, dass da "null" zurückkommt? Die Ausgabe ist "object" und damit für deinen Fall unbrauchbar.

      Das ist mit der bekannteste Bug in JavaScript und dürfte in so ziemlich jedem Artikel zum Thema typeof deutlich hervorgehoben sein. Unter anderem auch in diesem hier. Wer schon so lange mit JavaScript arbeitet wie Linuchs, sollte das eigentlich wissen …

      null ist kein Typ sondern ein Wert.

      Zwar nicht für typeof, aber ansonsten sowohl als auch. Das aber nur am Rande.

      Viele Grüße

      1. Wer schon so lange mit JavaScript arbeitet wie Linuchs, sollte das eigentlich wissen …

        Und dir passiert nie, dass du etwas vergisst, einen Flüchtigkeitsfehler machst oder einfach den Wald vor Bäumen nicht siehst?

        Außerdem war die Sache doch schon geklärt.

        --
        Meine Meinung zu DSGVO & Co:
        „Principiis obsta. Sero medicina parata, cum mala per longas convaluere moras.“
    2. null ist kein Typ sondern ein Wert.

      Streng genommen ist null ein Wert vom Typ Null. ;-)

      LG Priesemut