Tach!
if (foo && foo.bar && foo.bar.qux)
Für sowas würde ich immer einen Helper schreiben, der mir den ganzen Boilerplate abnimmt, z.B. sowas:
function getPath(obj, key, dfault = undefined) { const path = key.split(/\./); let i = 0; while (obj && i < path.length) { obj = obj[path[i++]]; } return obj === undefined ? dfault : obj; } console.log(getPath({}, "a.0.c")); console.log(getPath({ a: [{ c: 'd' }]}, "a.0.c")); console.log(getPath({}, "a.0.c", 'd'));
Was mir beim Nachdenken auch noch aufgefallen ist, du machst mit der Funktion nichts anderes als in meinem Beispiel, nur umständlicher. Die obige Prüfung ist gängige Praxis und kommt ohne eine Hilfsfunktion aus, die man erst verstehen muss. Die Zwischenteile des Pfades prüfst du ebenfalls nur falsy - was ja auch völlig ausreichend ist. Lediglich den letzten Teil prüfst du auf exakt undefined, wobei auch hier keine Rolle spielt, ob die Eigenschaft gar nicht oder mit dem Wert undefined vorhanden ist. Ich seh da jetzt noch nicht den Sinn in dieser Hilfsfunktion.
Es wird ein wenig besser je länger der Pfad zur Eigenschaft wird. Aber dann würde ich auch eher versuchen, den Code besser aufzuteilen, so dass sich nicht die Notwendigkeit einer solchen Rattenschwanzprüfung ergibt. Vermutlich gibt es auch noch weiter vorn im Pfad etwas zu prüfen, so dass bei der Gelegenheit gleich eine Variable mit Referenz auf das Restobjekt angelegt werden kann. Dann hat man bei dessen Prüfung weniger Glieder zu durchlaufen.
dedlfix.