91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JavaScript中怎么實現錯誤捕獲機制

發布時間:2021-08-12 10:52:36 來源:億速云 閱讀:150 作者:Leah 欄目:開發技術

今天就跟大家聊聊有關JavaScript中怎么實現錯誤捕獲機制,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

Error 對象

當運行時錯誤產生時,Error的實例對象會被拋出。

該錯誤對象有兩個屬性:

  • err.name:錯誤的名稱/錯誤的類型

  • err.message:錯誤的提示信息

創建一個Error

new Error([message[,fileName[,lineNumber]]])

錯誤類型js共定義了下列 7 種錯誤類型:

  1. Error

  2. EvalError

  3. RangeError

  4. ReferenceError

  5. SyntaxError

  6. TypeError

  7. URIError

throw

有些JavaScript代碼沒有語法上的錯誤,但是存在邏輯錯誤,對于這種錯誤,JavaScript不會拋出異常,這時候我們可以自己定義一個error對象的實例,并使用throw語句來主動拋出異常。在程序中我們可以通過使用throw語句有目的的拋出異常,其語法格式如下:

throw new Error("errorstatements")

try…catch…finally

  • try 可能發生異常的代碼

  • catch(error) 發生錯誤執行的代碼

  • finally 無論如何都會執行的代碼

三種形式的 try 聲明:

  • try...catch

  • try...finally

  • try...catch...finally

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 性能

有一個大家眾所周知的反優化模式就是使用 try/catch

在V8(其他JS引擎也可能出現相同情況)函數中使用了 try/catch 語句不能夠被V8編譯器優化.

window.onerror

通過在 window.onerror 上定義一個事件監聽函數,程序中其他代碼產生的未被捕獲的異常往往就會被 window.onerror 上面注冊的監聽函數捕獲到

window.onerror = function (message, source, lineno, colno, error) { }

  • message:異常信息(字符串)

  • source:發生異常的腳本URL(字符串)

  • lineno:發生異常的行號(數字)

  • colno:發生異常的列號(數字)

  • error:Error對象(對象)

Promise 中的異常

Promise 中拋出異常

  • new Promise((resolve,reject)=>{ reject(); })

  • Promise.resolve().then((resolve,reject)=>{ reject(); });

  • Promise.reject();

  • throw expression;

Promise中捕捉異常

  • 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 的異常捕獲

Vue.config.errorHandler = (err, vm, info) => {
  console.error("通過vue errorHandler捕獲的錯誤");
  console.error(err);
  console.error(vm);
  console.error(info);
};

看完上述內容,你們對JavaScript中怎么實現錯誤捕獲機制有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

墨竹工卡县| 开鲁县| 南部县| 天镇县| 宁化县| 龙游县| 公主岭市| 栾川县| 平原县| 鄂尔多斯市| 浠水县| 兴隆县| 宾川县| 长宁区| 专栏| 平南县| 巍山| 沛县| 定西市| 萍乡市| 公安县| 五家渠市| 彰武县| 高州市| 潞西市| 澄江县| 哈密市| 德令哈市| 阿巴嘎旗| 商丘市| 洪泽县| 科尔| 永福县| 嘉荫县| 阿拉善右旗| 富裕县| 武安市| 理塘县| 岳西县| 台江县| 江陵县|