JavaScript - 捕獲錯誤----使用try...catch語句

JavaScript - 捕獲錯誤

當我們在網上沖浪時,總會看到帶有 runtime 錯誤的 Javascript 警告框,同時會詢問我們“是否進行 debug?”。像這樣的錯誤信息或許對開發人員有用,對用戶則未必。當錯誤發生時,他們往往會選擇離開這個站點。

有兩種在網頁中捕獲錯誤的方法:

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

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

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


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

語法:

注意:try...catch 使用小寫字母。大寫字母會出錯。

目前我們可能得到的系統異常主要包含以下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

上面的六種異常對象都繼承自Error對象。他們都支持以下兩種構造方法:

new Error();

new Error("異常信息");

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

try {

throw new Error("Whoops!");

} catch (e) {

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

}

如要判斷異常信息的類型,可在catch中進行判斷:

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: 錯誤描述 (僅IE可用).

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

lineNumber: 出錯的行數 (僅Mozilla可用).

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

name: 錯誤類型.

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

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

因此為了更好的了解錯誤信息我們可以將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命令事實上可以拋出任何對象,并且我們可以在catch接受到此對象。例如:

try {

throw new Date(); // 拋出當前時間對象

} catch (e) {

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

}

實例1:

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

實例2:

會顯示一個確認框,讓用戶來選擇在發生錯誤時點擊確定按鈕來繼續瀏覽網頁,還是點擊取消按鈕來回到首頁。如果 confirm 方法的返回值為 false,代碼會把用戶重定向到其他的頁面。如果 confirm 方法的返回值為 true,那么代碼什么也不會做。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,505評論 6 533
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,556評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,463評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,009評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,778評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,218評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,281評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,436評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,969評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,795評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,993評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,537評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,229評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,659評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,917評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,687評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,990評論 2 374

推薦閱讀更多精彩內容

  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,719評論 18 399
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,785評論 18 139
  • javascript異常 所謂異常就是程序的非正常運行,通俗的說就是程序發生了錯誤。至于這些錯誤,有的是認為疏忽造...
    lwbg閱讀 984評論 0 1
  • 一. Java基礎部分.................................................
    wy_sure閱讀 3,826評論 0 11
  • 卑微的承諾 如天邊搖搖欲墜的星 我摘一朵花 放在眼眸 怕火,刺傷眼睛 我未發覺冷 隔岸望穿秋水的風 白露在耳邊 告...
    飛狐119閱讀 252評論 0 0