JavaScript try catch finally 語句

admin發表於2018-07-22

一.基礎知識:

try...catch...finally語句提供一種能夠處理指定程式碼錯誤,並且能夠保證程式碼正常執行的措施。

如果不使用此語句,如果指定的js程式碼出現程式碼錯誤,反饋到使用者介面上的將是非常不友好的崩潰資訊,並且這些資訊只對程式設計師有用,對於普通的瀏覽者來說,這個網頁已經出現問題,已經沒有繼續瀏覽的必要了。

語法結構:

[JavaScript] 純文字檢視 複製程式碼
try{
  //此語句從第一行開始執行,如果遇到錯誤(丟擲異常),該程式碼塊就會結束執行
}
catch(e){
  //如果try語句塊遇到錯誤(丟擲異常),此語句塊就會得到執行
  //e是一個物件,含有與異常相關的資訊
}
finally{
  //無論try中程式碼是否有異常丟擲,finally程式碼塊中始終會被執行。
}

進一步補充說明:

(1).try{}必需,裡面是有可能出現錯誤異常的程式碼。

(2).catch(e){}可選,如果有此語句,那麼e則是必須的。用來處理相關聯try語句中發生的錯誤。

(3).finally{}可選,其中的程式碼會在錯誤過程發生之後無條件執行。

特別說明:

catch(e){}和finally{}至少存在一個或者兩個同時存在。

二.執行流程:

如果存在catch語句,那麼try語句丟擲異常之後,就會立馬被catch捕獲並執行其中的程式碼。如果有finally語句,且沒有catch語句,try語句丟擲異常,然後執行finally語句,最後再將異常以異常的方式繼續往上拋,最終的處理參閱window.onerror用法一章節。

程式碼例項:

[JavaScript] 純文字檢視 複製程式碼執行程式碼
(function(){
  try{
    done(); 
  }
  catch(e){
    console.log(e.name);
console.log(e.message);
  }
  finally{
    console.log("finally");
  }
})()

以上程式碼是一個try...catch...finally語句的應用,同時我們看到引數e為我們提供很多資訊,它是一個物件,類似於事件物件,下面就對它做一下介紹。

三.Error物件:

目前可能得到的系統異常主要包含以下6種:

[JavaScript] 純文字檢視 複製程式碼
EvalError: raised when an error occurs executing code in eval() 
RangeError: raised when a numeric variable or parameter is outside of its valid range 
ReferenceError: raised when de-referencing an invalid reference 
SyntaxError: raised when a syntax error occurs while parsing code in eval() 
TypeError: raised when a variable or parameter is not a valid type 
URIError: raised when encodeURI() or decodeURI() are passed invalid parameters

上面的六種異常物件都繼承自Error物件。

程式碼例項如下:

[JavaScript] 純文字檢視 複製程式碼
new Error();
new Error("異常資訊");

Error物件屬性:

(1).description: 錯誤描述 (僅IE可用). 

(2).fileName: 出錯的檔名 (僅Mozilla可用). 

(3).lineNumber: 出錯的行數 (僅Mozilla可用). 

(4).message: 錯誤資訊 (在IE下同description) 

(5).name: 錯誤型別. 

(6).number: 錯誤程式碼 (僅IE可用). 

(7).stack: 像Java中的Stack Trace一樣的錯誤堆疊資訊 (僅Mozilla可用). 

四.手工丟擲異常資訊:

除了獲取系統的異常資訊,我們也可以手痛丟擲自定義異常資訊,這裡就要用到throw語句。

語法結構:

[JavaScript] 純文字檢視 複製程式碼
throw expression;

expression可以是任何型別物件例項。通常情況下丟擲一個Error物件或是Error物件的子類例項。

程式碼例項如下:

[JavaScript] 純文字檢視 複製程式碼執行程式碼
(function(){
  try{
    throw new Error("螞蟻部落自定義"); 
  }
  catch(e){
    console.log(e.name);
    console.log(e.message);
  }
  finally{
    console.log("finally");
  }
})()

丟擲的是一個Error物件例項。

[JavaScript] 純文字檢視 複製程式碼執行程式碼
(function(){
  try{
    throw new String("螞蟻部落");; 
  }
  catch(e){
    console.log(e.length);
  }
  finally{
    console.log("finally");
  }
})()

丟擲的是一個字串物件例項。

相關文章