1. 程式人生 > >emasc: JS 中 throw 與 Error 用法 以及 異常捕獲

emasc: JS 中 throw 與 Error 用法 以及 異常捕獲

emasc: JS 中 throw 與 Error 用法 以及 異常捕獲

在JS中,一旦出現某個錯誤,接下來的JS程式碼都會停止執行,這樣就顯的程式碼非常的不健壯。如果對異常進行捕獲處理,那麼接下來的JS程式碼會繼續執行。

JS 異常捕獲機制

try catch

try {
    throw new Error("發生錯誤!")
} catch (error) {
    // 
}

把有可能出的問題的程式碼放在 try 語句中。try語句中可以理論上可以寫任何的程式碼,只要有一行程式碼出現問題,整個程式的執行流程就會立即調到catch語句中執行。這樣帶來的問題是 catch 裡面邏輯會非常複雜。

一旦try中有一行程式碼發生異常,則這行出錯程式碼的後面的try中的其他語句都不會再執行。

在執行catch中的程式碼之前,js引擎會首先根據錯誤型別自動建立一個錯誤,並通過catch後面的引數傳遞到catch中。不同的瀏覽器建立的error物件不一樣,但是同創他們都包含一個message屬性,值是這個錯誤的一些資訊。

catch中的程式碼執行完畢之後,會繼續執行後面的程式碼,程式不會停止下來。

finally

try {
    throw new Error("發生錯誤!")
} catch (error) {
    // 
} finally {
    // 
}

在 try…catch 中,try 中一旦出現錯誤則其他語句不能執行,如果不出現錯誤則 catch 中的語句不會執行。

JS參考其他程式語言,也提供了一種 finally 語句:不管 try 中的語句有沒有錯誤,在最後都會執行 finally 中的語句。

需要注意的是:

  1. 在js中,如果添加了 finally 語句,則 catch 語句可以省略。所以下面的程式碼也是正確的。
  2. 如果沒有 catch 語句,則一旦發生錯誤就無法捕獲這個錯誤,所以在執行完 finally 中的語句後,程式就會立即停止了。 所以,在實際使用中,最好一直帶著 catch 語句。

JS中的錯誤型別