2011-10-12 33 views
1

可能重复:
javascript test for existence of nested object keyMyApphow检查 “的typeof MyApp.User.current.language”

if (typeof MyApp != 'undefined' && 
    typeof MyApp.User != 'undefined' && 
    typeof MyApp.User.current != 'undefined' && 
    typeof MyApp.User.current.language != 'undefined') { 

    console.log(MyApp.User.current.language); 
} 

这种感觉是错误的。这个if语句可以用更好的方式写出来吗?

+1

那个'Siag'从哪里来的? –

+0

谢谢理查德。固定。是一个C&P错误。 – Simon

回答

1

一个简单的方法是这样的:

try { 
    console.log(MyApp.User.current.language); 
} catch(e) {} 

,或者如果你不想“不确定”是输出,如果MyApp.User.current存在,但MyApp.User.current.language没有,那么你可以使用这个:

try { 
    if (typeof MyApp.User.current.language != 'undefined') { 
     console.log(MyApp.User.current.language); 
    } 
} catch(e) {} 

try/catch捕获MyAppMyApp.userMyApp.User.current未定义的情况,因此您不必单独测试它们。

1

你可以执行decompose conditional重构,并将该条件的函数:

if (currentLanguageIsDefined()) { 
    console.log(MyApp.User.current.language); 
} 

function currentLanguageIsDefined() { 
    return typeof MyApp != 'undefined' && 
      typeof MyApp.User != 'undefined' && 
      typeof MyApp.User.current != 'undefined' && 
      typeof MyApp.User.current.language != 'undefined'; 
} 

...或者你可以采取的操作&&评估返回的最后一个值的事实优势:

var lang; 
if(lang = getCurrentLang()) { 
    console.log(lang); 
} 

function getCurrentLang() { 
    return MyApp && MyApp.User && MyApp.User.current && MyApp.User.current.language; 
}