有人說:JavaScript就是爲了取悅用戶而給開發者帶來痛苦的一項技術。頁面中,錯誤在所難免。一般而言,頁面錯誤大致分爲兩種:程序內部的邏輯或者語法錯誤、運行中數據錯誤。前者多稱之爲錯誤(error),後則則多稱之爲異常(Exception)。
處理異常最常用的方式:try-catch-finally,通過異常處理,可以避免程序停止運行,從而具有了一定的自我修復能力。具體使用我就不多說,下面就異常處理中需要注意的地方小結一下。
在使用jQuey獲取一個對象的屬性時,如果該對象不存在,jQuery有可能會拋出異常,在有些我們不想讓用戶看到這樣的異常,最常用的方式就是先判斷該對象是否存在。如果不假思索,我們很有可能會使用如下方式:
if ($("#objID")){ }
這種方式看起來好像可以,實際上是不可取的。因爲jQuery對象永遠都有返回值,所以$("#objID") 總是返回TRUE 。
通過判斷對象是否存在有如下可取方式:
1、 使用普通的js代碼獲取該元素,判斷是否存在
if(document.getElementById('objId')){ //如果元素存在 }
2、 使用jQuery獲取,判斷該元素的大小(長度),或者將jQuery對象轉爲DOM對象判斷。
//判斷jQuery對象的長度 if($('#objId').length>0){ } //將jQuery對象轉換成DOM對象進行判斷 if($('#objId')[0]){ }
當然,也可以通過try-catch捕獲異常的方式來處理,不過這種方式用來處理對象是否存在就不太好了。
還有一種是在頁面編譯期間出現錯誤的情況,頁面代碼本身沒有問題,用戶的過快操作,頁面JS代碼還沒有執行完成就直接轉到其他頁面也會出現這樣的錯誤。這種錯誤拋給用戶是相當不友好的,那麼有沒有辦法去避免呢。下面是一種解決方案,在head部分添加如下代碼:
<SCRIPT type="text/javascript"> function doNothing(){ return true; } window.onerror = doNothing; </SCRIPT>
這種方案,只有在系統經過充分的測試後纔可以使用。測試的時候,建議把代碼註釋或者直接去掉。