Tach!
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
Für sowas würde ich immer einen Helper schreiben, der mir den ganzen Boilerplate abnimmt, z.B. sowas:
console.log(getPath({}, "a.0.c")); console.log(getPath({ a: [{ c: 'd' }]}, "a.0.c")); console.log(getPath({}, "a.0.c", 'd'));
Das würde ich nicht machen, weil man hier mit Magic Strings arbeiten muss. Wenn sich an den Bezeichnern etwas ändert, muss man diese Strings mit berücksichtigen.
Dafür bieten zwar einige IDEs Find-Hilfen an ("suche den Namen auch in Strings"), aber das ist nicht das Gelbe vom Ei, verglichen mit "ersetz mir alles" - besonders wenn man mit TypeScript eine schöne Typisierung zur Verfügung hat.
dedlfix.