您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關JavaScript中怎么實現錯誤捕獲機制,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
當運行時錯誤產生時,Error的實例對象會被拋出。
該錯誤對象有兩個屬性:
err.name:錯誤的名稱/錯誤的類型
err.message:錯誤的提示信息
創建一個Error
new Error([message[,fileName[,lineNumber]]])
錯誤類型js共定義了下列 7 種錯誤類型:
Error
EvalError
RangeError
ReferenceError
SyntaxError
TypeError
URIError
有些JavaScript代碼沒有語法上的錯誤,但是存在邏輯錯誤,對于這種錯誤,JavaScript不會拋出異常,這時候我們可以自己定義一個error對象的實例,并使用throw語句來主動拋出異常。在程序中我們可以通過使用throw語句有目的的拋出異常,其語法格式如下:
throw new Error("errorstatements")
try 可能發生異常的代碼
catch(error) 發生錯誤執行的代碼
finally 無論如何都會執行的代碼
三種形式的 try 聲明:
try...catch
try...finally
try...catch...finally
當在 finally 塊中拋出異常信息時會覆蓋掉 try 塊中的異常信息
try { try { throw new Error('can not find it1'); } finally { throw new Error('can not find it2'); } } catch (err) { console.log(err.message); } // can not find it2
如果從 finally 塊中返回一個值,那么這個值將會成為整個 try-catch-finally 的返回值,無論是否有 return 語句在 try 和 catch 中。這包括在 catch 塊里拋出的異常。
function test() { try { throw new Error('can not find it1'); return 1; } catch (err) { throw new Error('can not find it2'); return 2; } finally { return 3; } } console.log(test()); // 3
有一個大家眾所周知的反優化模式就是使用 try/catch
在V8(其他JS引擎也可能出現相同情況)函數中使用了 try/catch 語句不能夠被V8編譯器優化.
通過在 window.onerror 上定義一個事件監聽函數,程序中其他代碼產生的未被捕獲的異常往往就會被 window.onerror 上面注冊的監聽函數捕獲到
window.onerror = function (message, source, lineno, colno, error) { }
message:異常信息(字符串)
source:發生異常的腳本URL(字符串)
lineno:發生異常的行號(數字)
colno:發生異常的列號(數字)
error:Error對象(對象)
new Promise((resolve,reject)=>{ reject(); })
Promise.resolve().then((resolve,reject)=>{ reject(); });
Promise.reject();
throw expression;
promiseObj.then(undefined, (err)=>{ catch_statements });
promiseObj.catch((exception)=>{ catch_statements })
注意
在 JavaScript 函數中,只有 return / yield / throw 會中斷函數的執行,reject 不會阻止繼續執行
示例:
沒有 return 的 reject
Promise.resolve() .then(() => { console.log('before excute reject'); reject(new Error('throw error')); console.log('after excute reject'); }) .catch((err) => { console.log(err.message); }); // before excute reject // throw error // after excute reject
用了 return 的 reject
Promise.resolve() .then(() => { console.log('before excute reject'); return reject(new Error('throw error')); console.log('after excute reject'); //*** 區別在這里,return 的話這里不會執行了 }) .catch((err) => { console.log(err.message); }); // before excute reject // throw error
Vue.config.errorHandler = (err, vm, info) => { console.error("通過vue errorHandler捕獲的錯誤"); console.error(err); console.error(vm); console.error(info); };
看完上述內容,你們對JavaScript中怎么實現錯誤捕獲機制有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。