Js錯誤Error物件詳解

風靈使發表於2018-05-16

一、概念

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);  // 接住丟擲的自定義錯誤
}

四、例項練習

var n = 1;
function fun(){
    try{
        n++;
        return n;
    }catch(err){    
        // 沒錯誤,catch不執行
        n++;
        return n;    
    }finally{
        n++;
        return n;
    }
}

console.log(fun());// 3  return為finally的
console.log(n);// 3
var n = 1;
function fun(){
    try{
        n++;
        return n;
    }catch(err){
        // 沒錯誤,catch不執行
        n++;
        return n;
    }finally{
        n++;
    }
}
console.log(fun()); // 2  return為try的
console.log(n); // 3 
var n = 1;
function fun(){
    try{
        n++;
        n += m;  //出錯
        return n;   
    }catch(err){
        n++;
        return n;
    }finally{
        n++;
    }
}
console.log(fun());    // 3 return為catch的
console.log(n);        // 4

相關文章