Unverständlicher Javascript-Fehler wegen null
Linuchs
- javascript
2 Der Martin2 dedlfix
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
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
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
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.
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
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.
null
ist kein Typ sondern ein Wert.
Streng genommen ist null ein Wert vom Typ Null. ;-)
LG Priesemut