Js捕獲異常的方法
JavaScript
的異常主要使用try catch finally
語句以及窗口對象window
的onerror
事件來捕獲。
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