1. 程式人生 > 其它 >Javascript學習之錯誤處理

Javascript學習之錯誤處理

throw語句

使用throw語句丟擲一個異常。當丟擲異常,規定一個含有值的表示式要被丟擲。可以丟擲任意表達式而不是特定一種型別的表示式。

throw expression;

示例:

function UserException(excMessage) {
    this.excMessage = excMessage;
    this.excName = "UserException";
}
UserException.prototype.toString = function () {
    return this.excName + ":" + this.excMessage;
}

throw new UserException("this is an exception!!!"); throw "Error2"; // String type throw 42; // Number type throw true; // Boolean type throw {message: function() { return "1111111111"; } };

在丟擲異常時宣告一個物件,就可以在catch塊中查詢到物件的屬性。

try...catch語句

try...catch語句標記一塊待嘗試的語句,並規定一個以上的響應應該有一個異常被丟擲。如果我們丟擲一個異常,try...catch

語句就捕獲它。

try...catch語句有一個包含一條或者多條語句的try程式碼塊,0個或1個的catch程式碼塊,catch程式碼塊中的語句會在try程式碼塊中丟擲異常時執行。

如果try程式碼塊中的語句(或者try程式碼塊中呼叫的方法)一旦丟擲了異常,那麼執行流程會立即進入catch程式碼塊。如果try程式碼塊沒有丟擲異常,catch程式碼塊就會被跳過。

finally程式碼塊總會緊跟在try和catch程式碼塊之後執行,但會在try和catch程式碼塊之後的其他程式碼之前執行。

finally塊無論是否丟擲異常都會執行。如果丟擲了一個異常,就算沒有異常處理,finally塊裡的語句也會執行。

示例:

function getMonthName(mon) {
    let months = ["Jan","Feb","Mar","Apr","May","Jun","Jul",
                  "Aug","Sep","Oct","Nov","Dec"];
    if (months.includes(mon)) {
      return mon;
    } else {
      throw "InvalidMonthNo";
    }
}
  
try {
    let monthName = getMonthName("Mayyyy");
    console.log(monthName);
}catch (e) {
    console.log("exception:" + e);
}finally{
    console.log("excute finally!!");
}