Tach!
Wenn es keine solche Eigenschaft gibt, dann wird einfach undefined zurückgegeben.
Das ist nichts anderes als ein weiterer Designfehler von Javascript. Wenn ich lesend auf etwas zugreife, was es aber nicht gibt, sollte wenigstens eine Warnung kommen.
Wie löst du dann das Problem der Feature-Erkennung in unterschiedlichen Implementierungen? Versetz dich dazu in die Anfangszeit als es try-catch noch nicht gab. Auch damals musste man schon Programme schreiben können, die nicht gleich mit Fehler aussteigen, nur weil der eine Browser eine bestimmte Objekteigenschaft nicht kennt, die in anderen Browsern existiert. Wie testest du das, ohne dass dabei gleich die Konsole vollgemüllt wird oder das Script stirbt?
Eine Lösung wäre vielleicht à la PHPs Sprachkonstrukt isset()
. Das greift nicht wirklich zu, sondern prüft die Existenz und wirft dabei auch keinen Fehler. Aber was genau wäre dabei der Unterschied zwischen
if (isset(foo.bar))
und
if (foo.bar != undefined)
Javascript hat Möglichkeiten, die Nichtexistenz zu erkennen. Wenn der Programmierer sie nicht nutzt und lieber auf eine Warnung wartet, wenn er ungeprüft auf unbekannte Daten zugreift, sehe ich das nicht als das Problem von Javascript an.
Und es ist ja nicht so, dass gar nichts kommt. Beim weiteren Zugreifen hat man dann auch einen schönen Fehler:
var foo = {};
console.log(foo.bar); // nur undefined
console.log(foo.bar.qux); // Fehler, weil ein undefined keine Eigenschaften hat.
dedlfix.