首頁 >web前端 >js教程 >JS的try-catch語句與錯誤類型使用

JS的try-catch語句與錯誤類型使用

php中世界最好的语言
php中世界最好的语言原創
2018-06-04 10:25:562099瀏覽

這次帶給大家JS的try-catch語句與錯誤型別使用,JS的try-catch語句與錯誤型別使用注意事項有哪些,以下就是實戰案例,一起來看一下。

應用程式邏輯總是知道呼叫某個特定函數的原因,因此也是最適合處理錯誤的。千萬不要將try-catch中的catch區塊留空,你應該總是寫點什麼來處理錯誤。例如,不要像下面這樣做:

try {
  somethingThatMightCauseAnError();
} catch (ex) {  // do nothing}

如果知道可能要發生錯誤,那麼肯定知道如何從錯誤中恢復。確切地說,如何從錯誤中恢復在開發模式中與實際放到生產環境中是不一樣的,沒關係。最重要的是,你實在處理錯誤,而不是忽略它。

ECMA-262規格指出了7種錯誤類型。當不同錯誤條件發生時,這些類型在JS引擎中都有用到,當然我們也可以手動建立它們。

Error: 所有錯誤的基本型別。實際上引擎從來不會拋出該類型的錯誤。

EvalError: 透過eval()函數執行程式碼發生錯誤時拋出。

RangeError: 當一個數字超出它的邊界時拋出-例如,試圖建立長度為-20的陣列(new Array(-20);)。該錯誤在正常的程式碼執行中非常罕見。

ReferenceError: 期望的物件不存在時拋出-例如,試圖在一個null物件參考上呼叫函數。

SyntaxError: 程式碼有語法錯誤時拋出。

TypeError: 變數不是期望的型別時拋出。例如,new 10或'prop' in true。

URIError: 給encodeURI()、encodeURIComponent()、decodeURI()或decodeURIComponent()等函數傳遞格式非法的URI字串時拋出。

理解錯誤的不同類型可以幫助我們更容易處理它。所有的錯誤類型都繼承自Error,所以用instanceof Error檢查其類型得不到任何有用的信息。透過檢查特定的錯誤類型可以更可靠地處理錯誤。

try {  // 有些代码引发了错误} catch (ex) {  if (ex instanceof TypeError) {    // 处理TypeError错误
  } else if (ex instanceof ReferenceError) {    // 处理ReferenceError错误
  } else {    // 其他处理
  }
}

如果拋出自己的錯誤,並且是資料類型而不是一個錯誤,你可以非常輕鬆地區分自己的錯誤和瀏覽器的錯誤類型的不同。但是,拋出實際類型的錯誤與拋出其他類型的物件相比,有幾大優點。

首先,如上討論,在瀏覽器正常錯誤處理機制中會顯示錯誤訊息。其次,瀏覽器為拋出的Error物件附加了一些額外的資訊。這些資訊不同瀏覽器各不相同,但它們為錯誤提供瞭如行、列號等上下文訊息,在有些瀏覽器中也提供了堆疊和原始碼資訊。當然,如果用了Error的建構器,你就喪失了區分自己拋出的錯誤和瀏覽器錯誤的能力。

解決方案就是建立自己的錯誤類型,讓它繼承自Error。這種做法允許你提供額外的信息,同時可區別於瀏覽器拋出的錯誤。可以用如下的模式來建立自訂的錯誤類型。

function MyError (message) {  this.message = message;
}
MyError.prototype = new Error();

這段程式碼有兩個重要的部分:message屬性,瀏覽器必須要知道的錯誤訊息字串;設定prototype為Error的一個實例,這樣對JS引擎而言就標識它是一個錯誤對象了。接下來就可以拋出一個MyError的實例對象,讓瀏覽器能像處理原生錯誤一樣做出回應。

throw new MyError('Hello World!');

提醒一下,該方法在IE8和更早的瀏覽器中不顯示錯誤訊息。相反,會看見那個通用的「Exception thrown but not caught」訊息。這個方法最大的好處是,自訂錯誤類型可以偵測自己的錯誤。

try {  // 有些代码引发了错误} catch (ex) {  if (ex instanceof MyError) {    // 处理自己的错误
  } else {    // 其他处理
  }
}

如果總是捕捉你自己拋出的所有錯誤,那麼IE的那點兒小愚蠢也不足為奇了。在一個正確的錯誤處理系統中獲得的好處是巨大的。此方法可以給出更多、更靈活的訊息,告知開發者如何正確地處理錯誤。

相信看了本文案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!

推薦閱讀:

web開發中如何避免空比較

#為什麼web開發中需要避免使用全域變數

以上是JS的try-catch語句與錯誤類型使用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn