1. 程式人生 > >編寫可維護程式碼3:適當的丟擲錯誤提示

編寫可維護程式碼3:適當的丟擲錯誤提示

編寫可維護的程式碼規則第3篇。

在js開發中,除錯錯誤是一個比較頭疼的事,又不像java的debug那麼方便,定位錯誤往往不是那麼容易,除非對程式碼熟悉無比,但即使是自己寫的程式碼,功能一複雜,時間一長,再想快速定位問題,至少我現在是比較頭疼的。此時,如果有一個比較友好的錯誤提示,那解決問題的效率將大大提高。

所以是時候學會在合適的地方丟擲錯誤提示了。

js中丟擲錯誤的方法有兩種:throw new Error()丟擲錯誤和try...catch..捕獲錯誤。

先來看throw new Error()

function getDiv(el){
    if(el &&
el.getElementsByTagName){ return el.getElementsByTagName('div'); }else { throw new Error('getDiv(): Argument must be a Dom Element.') } } var div = document.getElementById('div1'); getDiv(null); // Uncaught Error: getDiv(): Argument must be a Dom Element.

上例列印結果可知,明確給出了方法呼叫的錯誤提示。當getDiv()

方法的引數傳入不符合要求時,就會丟擲錯誤提示。

Error型別在所有的javascrit實現中都是有效的,它的構造器只接收一個引數,即錯誤訊息。當以這種方式丟擲錯誤時,如果沒有經try-catch語句來捕獲的話,瀏覽器通常直接在控制檯顯示錯誤訊息字串。

通常在丟擲的錯誤提示字串中,應儘量寫清錯誤目標和原因。這樣做,當實際除錯時,能明確告訴開發者問題的定位。

那什麼時候需要丟擲錯誤呢?

  • 修復一個自認為較複雜的錯誤後,及時增加相應的自定義錯誤提示。
  • 寫程式碼時,思考不想要發生的程式時,針對這個不想要發生的事,丟擲錯誤提示。

再來看下try-catch語句:

try
{ throw new Error("wrong msg."); } catch(err) { console.log('catch msg: ' + err); } finally { console.log('finally msg.'); }

try塊中發生錯誤時,程式立即停止執行,並跳轉到catch塊中,並傳入一個錯誤物件。至於後面的finally塊,不管前面是否有錯誤發生,最終都會執行。

最後再來看看常見的錯誤型別。

  • Error:所有錯誤的基本型別,實際上引擎從不會丟擲該型別的錯誤
  • EvalError:通過eval()函式執行程式碼發生錯誤時丟擲
  • RangerError:一個數字超出它的邊界時丟擲,比較罕見
  • ReferenceError:期望的物件不存在時丟擲,如試圖在一個null物件引用上呼叫一個函式。
  • SyntaxError:給eval()函式傳遞的程式碼中有語法錯誤時丟擲
  • TypeError:變數不是期望型別時丟擲。如 new 10"prop" in true
  • URIError:給encodeURI()encodeURIComponent()decodeURIdecodeURIComponent()等函式傳遞格式非法的URI字串時丟擲

喜歡本文請掃下方二維碼,關注微信公眾號: 前端小二,檢視更多我寫的文章哦,多謝支援。
在這裡插入圖片描述