第17章 錯(cuò)誤處理與調(diào)試

17.2 錯(cuò)誤處理

17.2.1 try-catch 語句
1、

try{
    // 可能會(huì)導(dǎo)致錯(cuò)誤的代碼
} catch (error) {
    // 在錯(cuò)誤發(fā)生時(shí)怎么處理
}  finally {
    //無論try和catch中執(zhí)行任何代碼,都會(huì)執(zhí)行
}

try{
    return 2;
} catch (error) {
    return 1;
}  finally {
    return 0;
}

前面說過,無論try和catch中執(zhí)行任何代碼,finally都會(huì)執(zhí)行,所以這個(gè)會(huì)返回 return 0;

2、錯(cuò)誤類型

(1) Error 是基類型,其他錯(cuò)誤類型都繼承自該類型

(2) EvalError:如果沒有把 eval() 當(dāng)成函數(shù)調(diào)用,就會(huì)拋出這個(gè)錯(cuò)誤
比如:

    new eval();
    eval = foo;

(3) RangeError:在數(shù)值超出相應(yīng)范圍時(shí)觸發(fā)
比如:

    new Array(-20);

(4) ReferenceError:找不到對(duì)象情況下,會(huì)發(fā)生這個(gè)錯(cuò)誤
比如:

    var obj = x;

(5) SyntaxError:把語法錯(cuò)誤的 JS 字符串傳入 eval() 函數(shù)時(shí),會(huì)發(fā)生此類錯(cuò)誤
比如:

    eval('a ++ b')

(6) TypeError:在變量中保存著意外的類型時(shí),或者訪問不存在的方法時(shí),都會(huì)報(bào)錯(cuò)
比如:

    var o = new 10;

利用不同的錯(cuò)誤類型,可以獲悉更多有關(guān)異常的信息

try {
    someFunction();
} catch (error){
    if ( error instanceof TypeError ){
         //處理錯(cuò)誤類型
    } else if ( error instanceof ReferenceError ){
         //處理引用錯(cuò)誤
    } else {
         // 處理其他類型的錯(cuò)誤
    }
}

17.2.2 拋出錯(cuò)誤

在遇到 throw 操作符時(shí),代碼會(huì)立即停止執(zhí)行。僅當(dāng)有 try-catch 語句捕獲到被拋出的值時(shí),代碼才會(huì)繼續(xù)執(zhí)行。

可以結(jié)合上面的錯(cuò)誤類型使用 throw

throw new TypeError('What type of variable do you take me of?')

17.2.3 錯(cuò)誤( error )事件

任何沒有通過 try-catch 處理的錯(cuò)誤都會(huì)觸發(fā) window 對(duì)象的 error 事件。

/*
 * message:錯(cuò)誤消息
 * ur:錯(cuò)誤所在url
 * line:行號(hào)
 */
window.onerror = function(message, url, line){
    alert(message);
}

17.2.4 處理錯(cuò)誤的策略

17.2.5 常見的錯(cuò)誤類型

  1. 類型轉(zhuǎn)換錯(cuò)誤

類型轉(zhuǎn)換錯(cuò)誤發(fā)生在使用某個(gè)操作符,或者使用其他可能會(huì)自動(dòng)轉(zhuǎn)換值的數(shù)據(jù)類型的語言結(jié)構(gòu)時(shí)。

function concat(str1, str2, str3){
    var result = str1 + str2;
    if ( str3 ){  //絕對(duì)不要這樣,如果 str3 為 0, 則會(huì)出錯(cuò)
         result += str3;
    }
    return result;
}
  1. 數(shù)據(jù)類型錯(cuò)誤

  2. 通信錯(cuò)誤
    第一種、通信錯(cuò)誤與格式不正確的 URL 或發(fā)送的數(shù)據(jù)有關(guān)。
    第二種、服務(wù)器響應(yīng)的數(shù)據(jù)不正確時(shí),也會(huì)發(fā)生通信錯(cuò)誤。

17.2.6 區(qū)分致命錯(cuò)誤和非致命錯(cuò)誤

17.2.7 把錯(cuò)誤記錄到服務(wù)器

17.3 調(diào)試技術(shù)

console對(duì)象向 JS 控制臺(tái)寫入消息:

error(message):將錯(cuò)誤消息記錄到控制臺(tái)
info(message):將信息性消息記錄到控制臺(tái)
log(message):將一般消息記錄到控制臺(tái)
warn(message):將警告消息記錄到控制臺(tái)

17.4 常見的 IE 錯(cuò)誤

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 本章內(nèi)容 理解瀏覽器報(bào)告的錯(cuò)誤 處理錯(cuò)誤 調(diào)試 JavaScript 代碼 17.1 瀏覽器報(bào)告的錯(cuò)誤 17.1....
    悶油瓶小張閱讀 410評(píng)論 0 0
  • 1. 錯(cuò)誤處理: 1.1 . try-catch語句 try中的代碼發(fā)生錯(cuò)誤后,會(huì)立即退出代碼執(zhí)行過程,然后執(zhí)行c...
    xiaoguo16閱讀 428評(píng)論 0 0
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,745評(píng)論 18 399
  • 昨天看到踐行群伙伴分享的一段話,特別觸動(dòng) 是的,走著走著就忘了我們夢(mèng)的模樣 大家心中都會(huì)有夢(mèng)想,都會(huì)有遠(yuǎn)景的目標(biāo),...
    龔少90990閱讀 456評(píng)論 5 2
  • 最近重裝了系統(tǒng)(xp升級(jí)到WIN7),又開始折騰虛擬機(jī),玩玩ubuntu server,但是,當(dāng)我安裝完最新版的V...
    曾浩閱讀 11,030評(píng)論 1 2

友情鏈接更多精彩內(nèi)容