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ò)誤類型
- 類型轉(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;
}
數(shù)據(jù)類型錯(cuò)誤
通信錯(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ò)誤