在JavaScript中最常見的策略是寫防禦和徹底測試。
例如還有一些類似測試開始在廣場一個庫:
var element;
if (document && document.getElementById) {
element = document.getElementById('foo');
}
if (element) {
// use element
}
,但寫在與像isHostMethod測試一個更通用的格式。
僱用try..catch只作爲最後的手段,其中功能檢測或其他防禦措施不可用。測試主機對象有時會返回無用的結果,甚至可能會引發錯誤(例如,所有XMLHttpRequest腳本都使用try..catch,因爲在IE中測試支持是不確定的,因此唯一的選擇就是調用它並查看會發生什麼)。
小腳本錯誤並不是什麼大問題,因爲大多數瀏覽器默認情況下都不會顯示它們。根據瀏覽器,設置和用戶的網絡環境等因素,大多數不平凡的頁面會一直拋出錯誤(包括SO)。用戶被拒絕的功能,他們可能會或可能不知道他們錯過了(並可能實際上受益)。因此,一種典型的策略是使頁面在沒有任何腳本的情況下正常工作,然後添加腳本功能以增強可用性。這樣,如果發生錯誤,可能會導致基本功能回退,否則可能會導致頁面無法使用。
這種策略可能並不總是可行的,但這是一個很好的起點,不應該輕易放棄。
讓我們假設你在try/catch中包裝了每個塊:你的catch塊實際上對異常做了什麼? – nnnnnn 2013-04-11 11:32:34
@nnnnnn不會避免崩潰整個腳本是否足夠有用?我看到一些嘗試catch塊在jQuery UI的代碼與catch塊,所以我認爲這是包裝所有代碼的目的之一? – 2013-04-11 11:34:34
我的觀點是想想在異常之後會發生什麼或應該發生什麼,並確保相應的編碼。如果上半場發生異常,「避免崩潰整個腳本」並不會真正起到幫助作用,但如果沒有上半場的有效結果,下半場將無法正常工作。一些例外情況可以通過正確編碼完全避免 - 我並不是說你會這樣做,但是我已經看到很多代碼,作者在代碼中編寫了一些不好的代碼,然後用空白的catch函數嘗試包裝它只是爲了避免讓用戶看到可避免的錯誤。 – nnnnnn 2013-04-11 12:02:18