2013-04-11 78 views
5

我已經忽略了足夠長的異常處理,主要是因爲我從來沒有看到它用在我看到的片段上,2年來編寫javascript,我甚至不知道JavaScript有異常處理。其他語言是非常常見的異常處理,異常處理對於JavaScript來說不那麼重要?什麼是一些典型的情況下,應該總是在javascript中使用異常處理,而不應該這樣做?我是否應該總是將代碼封裝在Javascript的Try Catch塊中?

此規則是否也適用於JavaScript?

Why should I not wrap every block in "try"-"catch"?

+1

讓我們假設你在try/catch中包裝了每個塊:你的catch塊實際上對異常做了什麼? – nnnnnn 2013-04-11 11:32:34

+0

@nnnnnn不會避免崩潰整個腳本是否足夠有用?我看到一些嘗試catch塊在jQuery UI的代碼與catch塊,所以我認爲這是包裝所有代碼的目的之一? – 2013-04-11 11:34:34

+1

我的觀點是想想在異常之後會發生什麼或應該發生什麼,並確保相應的編碼。如果上半場發生異常,「避免崩潰整個腳本」並不會真正起到幫助作用,但如果沒有上半場的有效結果,下半場將無法正常工作。一些例外情況可以通過正確編碼完全避免 - 我並不是說你會這樣做,但是我已經看到很多代碼,作者在代碼中編寫了一些不好的代碼,然後用空白的catch函數嘗試包裝它只是爲了避免讓用戶看到可避免的錯誤。 – nnnnnn 2013-04-11 12:02:18

回答

3

在JavaScript中最常見的策略是寫防禦和徹底測試。

例如還有一些類似測試開始在廣場一個庫:

var element; 

if (document && document.getElementById) { 
    element = document.getElementById('foo'); 
} 

if (element) { 
    // use element 
}  

,但寫在與像isHostMethod測試一個更通用的格式。

僱用try..catch只作爲最後的手段,其中功能檢測或其他防禦措施不可用。測試主機對象有時會返回無用的結果,甚至可能會引發錯誤(例如,所有XMLHttpRequest腳本都使用try..catch,因爲在IE中測試支持是不確定的,因此唯一的選擇就是調用它並查看會發生什麼)。

小腳本錯誤並不是什麼大問題,因爲大多數瀏覽器默認情況下都不會顯示它們。根據瀏覽器,設置和用戶的網絡環境等因素,大多數不平凡的頁面會一直拋出錯誤(包括SO)。用戶被拒絕的功能,他們可能會或可能不知道他們錯過了(並可能實際上受益)。因此,一種典型的策略是使頁面在沒有任何腳本的情況下正常工作,然後添加腳本功能以增強可用性。這樣,如果發生錯誤,可能會導致基本功能回退,否則可能會導致頁面無法使用。

這種策略可能並不總是可行的,但這是一個很好的起點,不應該輕易放棄。

0

異常是一個大問題,如果情況是性能。但它以非常簡單的方式進行錯誤檢測。

如果正在使用某些引發異常的工具,那麼您應該通過try catch塊運行它們。

儘量減少編碼的JavaScript

1

時在C,這是很好的做法,檢查返回代碼拋出異常。

然後是帶有例外的C++。 Java對它們的使用非常繁重,甚至太重(例如:Integer.parseInt:即使您只想檢查,如果是String,您仍然必須處理異常)。

JavaScript有異常處理的其他概念。一個好的做法是爲異常處理提供一個回調。如果沒有找到元素,jQuery選擇器仍然「有效」,那麼只能得到0元素的選擇器。

因此,如果您使用引發異常的代碼,則必須處理它。但是你應該避免拋出異常並通過回調來支持錯誤處理。