JavaScript - 捕獲錯(cuò)誤----使用try...catch語句

JavaScript - 捕獲錯(cuò)誤

當(dāng)我們?cè)诰W(wǎng)上沖浪時(shí),總會(huì)看到帶有 runtime 錯(cuò)誤的 Javascript 警告框,同時(shí)會(huì)詢問我們“是否進(jìn)行 debug?”。像這樣的錯(cuò)誤信息或許對(duì)開發(fā)人員有用,對(duì)用戶則未必。當(dāng)錯(cuò)誤發(fā)生時(shí),他們往往會(huì)選擇離開這個(gè)站點(diǎn)。

有兩種在網(wǎng)頁中捕獲錯(cuò)誤的方法:

使用try...catch語句。(在 IE5+、Mozilla 1.0、和 Netscape 6 中可用)

使用onerror事件。這是用于捕獲錯(cuò)誤的老式方法。(Netscape 3 以后的版本可用)

注意:chrome、opera 和 safari 瀏覽器不支持 onerror 事件。


在JavaScript可以使用try...catch來進(jìn)行異常處理。例如:

語法:

注意:try...catch 使用小寫字母。大寫字母會(huì)出錯(cuò)。

目前我們可能得到的系統(tǒng)異常主要包含以下6種:

1、EvalError: raised when an error occurs executing code in eval()

2、RangeError: raised when a numeric variable or parameter is outside of its valid range

3、ReferenceError: raised when de-referencing an invalid reference

4、SyntaxError: raised when a syntax error occurs while parsing code in eval()

5、TypeError: raised when a variable or parameter is not a valid type

6、URIError: raised when encodeURI() or decodeURI() are passed invalid parameters

上面的六種異常對(duì)象都繼承自Error對(duì)象。他們都支持以下兩種構(gòu)造方法:

new Error();

new Error("異常信息");

手工拋出異常的方法如下:

try {

throw new Error("Whoops!");

} catch (e) {

alert(e.name + ": " + e.message);

}

如要判斷異常信息的類型,可在catch中進(jìn)行判斷:

try {

foo.bar();

} catch (e) {

if (e instanceof EvalError) {

alert(e.name + ":" + e.message);

}

else if (e instanceof RangeError) {

alert(e.name + ": " + e.message);

}

//........

}


Error具有下面一些主要屬性:

description: 錯(cuò)誤描述 (僅IE可用).

fileName: 出錯(cuò)的文件名 (僅Mozilla可用).

lineNumber: 出錯(cuò)的行數(shù) (僅Mozilla可用).

message: 錯(cuò)誤信息 (在IE下同description)

name: 錯(cuò)誤類型.

number: 錯(cuò)誤代碼 (僅IE可用).

stack: 像Java中的Stack Trace一樣的錯(cuò)誤堆棧信息 (僅Mozilla可用).

因此為了更好的了解錯(cuò)誤信息我們可以將catch部分改為如下形式:

try {

foo.bar();

} catch (e) {

if (browserType != BROWSER_IE) {

alert("name: " + e.name +

"message: " + e.message +

"lineNumber: " + e.lineNumber +

"fileName: " + e.fileName +

"stack: " + e.stack);

}

else {

alert("name: " + e.name +

"errorNumber: " + (e.number & 0xFFFF ) +

"message: " + e.message");

}

}

JavaScript中的throw命令事實(shí)上可以拋出任何對(duì)象,并且我們可以在catch接受到此對(duì)象。例如:

try {

throw new Date(); // 拋出當(dāng)前時(shí)間對(duì)象

} catch (e) {

alert(e.toLocaleString()); // 使用本地格式顯示當(dāng)前時(shí)間

}

實(shí)例1:

原本用在用戶點(diǎn)擊按鈕時(shí)顯示 "Welcome guest!" 這個(gè)消息。不過 message() 函數(shù)中的 alert() 被誤寫為 adddlert()。這時(shí)錯(cuò)誤發(fā)生了
用 try...catch 語句重新修改了腳本。由于誤寫了 alert(),所以錯(cuò)誤發(fā)生了。不過這一次,catch 部分捕獲到了錯(cuò)誤,并用一段準(zhǔn)備好的代碼來處理這個(gè)錯(cuò)誤。這段代碼會(huì)顯示一個(gè)自定義的出錯(cuò)信息來告知用戶所發(fā)生的事情。

實(shí)例2:

會(huì)顯示一個(gè)確認(rèn)框,讓用戶來選擇在發(fā)生錯(cuò)誤時(shí)點(diǎn)擊確定按鈕來繼續(xù)瀏覽網(wǎng)頁,還是點(diǎn)擊取消按鈕來回到首頁。如果 confirm 方法的返回值為 false,代碼會(huì)把用戶重定向到其他的頁面。如果 confirm 方法的返回值為 true,那么代碼什么也不會(huì)做。
最后編輯于
?著作權(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),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,697評(píng)論 18 399
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,564評(píng)論 19 139
  • javascript異常 所謂異常就是程序的非正常運(yùn)行,通俗的說就是程序發(fā)生了錯(cuò)誤。至于這些錯(cuò)誤,有的是認(rèn)為疏忽造...
    lwbg閱讀 1,079評(píng)論 0 1
  • 一. Java基礎(chǔ)部分.................................................
    wy_sure閱讀 4,011評(píng)論 0 11
  • 卑微的承諾 如天邊搖搖欲墜的星 我摘一朵花 放在眼眸 怕火,刺傷眼睛 我未發(fā)覺冷 隔岸望穿秋水的風(fēng) 白露在耳邊 告...
    飛狐119閱讀 270評(píng)論 0 0

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