2009-12-31 83 views
39

Possible Duplicate:
Detecting an undefined object property in JavaScript如何處理 '未定義' 在javascript

從JavaScript樣本

try { 
    if(jsVar) { 
    proceed(); 
     } 
}catch(e){ 
     alert(e); 
} 

這jsVar聲明,而在另一個JS精細草簽以下。

問題是,當代碼在其他文件(其聲明和啓動的位置)執行之前執行時,代碼會拋出未定義的錯誤。這就是爲什麼它被嘗試和捕獲包圍。

最好的辦法處理這個未定義的錯誤比嘗試抓住?

回答

64

您可以

if (typeof(jsVar) == 'undefined') { 
    ... 
} 
+0

這比「我的」方式有什麼優勢嗎? – 2009-12-31 09:54:16

+0

它可能會拋出一個錯誤:jsVar未定義。你應該這樣測試:if(window.jsVar!== undefined){}。這似乎是typeof()「捕捉」這個錯誤。 – 2009-12-31 10:15:15

+0

@Fabien:或者可能使用if(「jsVar」in window){} ...但是我會避免需要編碼這個錯誤情況的代碼。 – 2010-01-01 09:51:58

0

在javascript中檢查的事實,下面的值將導致如果條件失敗,不執行其聲明:null,未定義,假大,NaN,數字0和空字符串''。

假設變量jsVar是一個布爾值,並且當jsVar爲true時我們想調用proceed()方法,我們可以執行以下檢查。

if (jsVar && jsVar == true) 
    proceed(); 

上面的代碼片段首先檢查jsVar是否已被定義,然後檢查其值是否爲真。 if條件只有滿足兩個條件才能滿足。

如果jsVar不是布爾值,那麼我們可以在上面的代碼中用合適的檢查代替jsVar == true。

+0

請記住,這並不檢查布爾值'true',因爲你沒有使用嚴格的比較(在JS中,例如'''== true'是真的!這仍然會拋出參考錯誤,以及如果變量沒有被定義,即你的代碼沒有解決Madhu的問題 – Christoph 2009-12-31 10:46:53

+0

@Christoph你是對的! – Scott 2009-12-31 13:54:31

8

正如通常用JavaScript的情況下,有多種方法來做到這一點:

typeof foo !== 'undefined' 
window.foo !== undefined 
'foo' in window 

前兩個應相當於(只要foo不是由一個局部變量陰影),而如果全局變量已定義但未初始化(或明確設置爲undefined),最後一個將返回true