try catch finally的理解

定義以及用法:javascript

try/catch/finally 語句用於處理代碼中可能出現的錯誤信息。html

錯誤多是語法錯誤,一般是程序員形成的編碼錯誤或錯別字。也多是拼寫錯誤或語言中缺乏的功能(可能因爲瀏覽器差別)。java

try語句容許咱們定義在執行時進行錯誤測試的代碼塊。程序員

catch 語句容許咱們定義當 try 代碼塊發生錯誤時,所執行的代碼塊。編程

finally 語句在 try 和 catch 以後不管有無異常都會執行。瀏覽器

注意: catch 和 finally 語句都是可選的,但你在使用 try 語句時必須至少使用一個。編程語言

提示: 當錯誤發生時, JavaScript 會中止執行,並生成一個錯誤信息。使用 throw 語句 來建立自定義消息(拋出異常)。若是你將 throwtrycatch一塊兒使用,就能夠控制程序輸出的錯誤信息。函數

 

總結:測試

try { //執行的代碼,其中可能有異常。一旦發現異常,則當即跳到catch執行。不然不會執行catch裏面的內容 } 

catch { //除非try裏面執行代碼發生了異常,不然這裏的代碼不會執行 } 

finally { //無論什麼狀況都會執行,包括try catch 裏面用了return ,能夠理解爲只要執行了try或者catch,就必定會執行 finally } 編碼

案例:

	(function (){
		try{
			throw new Error();
		}catch(x){
			var x = 1, y = 2;
			console.log(x); // 1
		}
		console.log(x); //undefined
		console.log(y); //2
	}());

下面說一下js錯誤Error對象的詳解:

 一·概念

error,指程序中的非正常運行狀態,在其餘編程語言中稱爲「異常」或「錯誤」。解釋器會爲每一個錯誤情形建立並拋出一個Error對象,其中包含錯誤的描述信息。

ECMAScript定義了六種類型的錯誤。除此以外,還可使用Error構造方法建立自定義的Error對象,並使用throw語句拋出該對象。

六種錯誤:

  • ReferenceError:找不到對象時
  • TypeError:錯誤的使用了類型或對象的方法時
  • RangeError:使用內置對象的方法時,參數超範圍
  • SyntaxError:語法寫錯了
  • EvalError:錯誤的使用了Eval   
  • URIError:URI錯誤

二·錯誤處理

即便程序發生錯誤,也保證不異常中斷的機制。

 

try{
    可能發生錯誤的代碼
}catch(err){
    只有發生錯誤時才執行的代碼
}finally{
    不管是否出錯,確定都要執行的代碼
}

 

使用要點:

  • 使用try包裹的代碼,即便不出錯,效率也比不用try包裹的代碼低;
  • 在try中,儘可能少的包含可能出錯的代碼;
  • 沒法提早預知錯誤類型的錯誤,必須用try catch捕獲;
  • finally能夠省略;

三·拋出自定義錯誤

什麼時候:若是函數的定義者,須要告知調用者使用過程當中的錯誤;

如何:throw new Error("提示文字");

// 甲:定義函數的人
function round(num, d){
    if(!isNaN(num) && !isNaN(d)){
        num *= Math.pow(10, d);
        return num;
    }else{
        // 拋出自定義錯誤
        throw new Error("參數必須是數字");  
    }
}

// 乙:調用函數的人
var d = parseInt(prompt('請輸入數字'));
try{
    alert(round(123.456, d));
}catch(err){
    alert(err.message);  // 接住拋出的自定義錯誤
}
相關文章
相關標籤/搜索