Js捕獲異常的方法


Js捕獲異常的方法

JavaScript的異常主要使用try catch finally語句以及窗口對象windowonerror事件來捕獲。

try catch finally

try catch finally只能捕獲運行時的錯誤,無法捕獲語法錯誤,可以拿到出錯的信息,堆棧,出錯的文件、行號、列號。try catch finally語句標記要嘗試的語句塊,並指定一個出現異常時拋出的響應。

try{
    // try_statements
    throw new TypeError("Test");
}catch (e){
    // catch_statements
    console.log("catch_statements");
    if(e instanceof TypeError){
        // handle this expected error
        console.log("handle this expected error");
    }else{
        // handle unexpected error
        console.log("handle unexpected error");
    }
}finally{
    // finally_statements
    console.log("finally_statements");
}

/*
    注:
    [catch (e if e instanceof TypeError) { // 非標准
       catch_statements
    }]
*/

通過Error的構造器可以創建一個錯誤對象,當運行時錯誤產生時,Error的實例對象會被拋出,Error對象也可用於用戶自定義的異常的基礎對象,Js內建了幾種標准錯誤類型:

  • EvalError: 創建一個error實例,表示錯誤的原因:與eval()有關。
  • RangeError: 創建一個error實例,表示錯誤的原因:數值變量或參數超出其有效范圍。
  • ReferenceError: 創建一個error實例,表示錯誤的原因:無效引用。
  • SyntaxError: 創建一個error實例,表示錯誤的原因:eval()在解析代碼的過程中發生的語法錯誤。
  • TypeError: 創建一個error實例,表示錯誤的原因:變量或參數不屬於有效類型。
  • URIError: 創建一個error實例,表示錯誤的原因:給encodeURI()decodeURl()傳遞的參數無效。

window.onerror

window.onerror可以捕捉語法錯誤,也可以捕捉運行時錯誤,可以拿到出錯的信息,堆棧,出錯的文件、行號、列號,只要在當前window執行的Js腳本出錯都會捕捉到,通過window.onerror可以實現前端的錯誤監控。出於安全方面的考慮,當加載自不同域的腳本中發生語法錯誤時,語法錯誤的細節將不會報告。

/*
    message:錯誤信息(字符串)。
    source:發生錯誤的腳本URL(字符串)
    lineno:發生錯誤的行號(數字)
    colno:發生錯誤的列號(數字)
    error:Error對象(對象)
    若該函數返回true,則阻止執行默認事件處理函數。
*/
window.onerror = function(message, source, lineno, colno, error) { 
    // onerror_statements
}

/*
    ErrorEvent類型的event包含有關事件和錯誤的所有信息。
*/
window.addEventListener('error', function(event) { 
    // onerror_statements
})

每日一題

https://github.com/WindrunnerMax/EveryDay

參考

https://www.jianshu.com/p/307df0f8d3f0
https://developer.mozilla.org/zh-CN/docs/Web/API/GlobalEventHandlers/onerror
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/try...catch


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM