Вам не нужно явно указывать неопределенное.Проверка может быть что-то вроде:
if(foo && foo.bar && foo.bar.obj && foo.bar.obj.prop1)
Или у вас может быть блок try catch для перехвата при наличии ошибки:
try
{
if(foo && foo.bar && foo.bar.obj && foo.bar.obj.prop1)
{}
}
catch(e)
{
alert(e);
}
Но да, я вижу проблему.Я бы посоветовал попытаться избежать глубокого вложения, как у вас.