Tach!
Das ist eine zu beachtende Besonderheit. Aber der Unterschied zwischen einem undefined bei einer nicht vorhandenen Eigenschaft und einem undefined als Wert in einer vorhandenen Eigenschaft ist praktisch nicht vorhanden.
Das sehe ich anders. Ich habe den Unterschied schon öfter gebraucht, und gerade in einem Forum, dass Web-Technologien vermittelt, sollte das nicht so unter den Teppich gekehrt werden.
Ja, es gibt auch Fälle, da sind die Keys für eine bestimmte Funktionalität wichtig. Diese Fälle "darf" man natürlich auch berücksichtigen. Wenn aber der Key lediglich ein Name für einen Wert ist, dann interesiert mich der Wert und nicht, ob der Name existiert. Da reicht ein
if (foo && foo.bar && foo.bar.qux)
völlig aus, um zu testen, ob foo.bar (als Objekt) existiert und in foo.bar.qux was sinnvolles drinsteht - unter der Voraussetzung, dass nur truthy Werte für den gegebenen Fall als sinnvoll angesehen werden. Ich würde in einem solchen Fall nicht mit hasOwnProperty() und dem zusätzlich notwendigen Test, dass der Wert weder undefined noch null ist, arbeiten, wenn die obige Syntax ausreichend ist.
dedlfix.