try..catch是一個很實用,安全的捕捉錯誤的方法. 使用方法如下。 例子參考:http://www.cnblogs.com/newblue/archive/2006/12/28/606100.html <html> <head><title>try...catch...finally</title></head> <body> <script type="text/javascript"> //<![CDATA[ //在JavaScript可以使用try...catch來進行異常處理。例如: try { foo.bar(); } catch (e) { alert(e.name + " : " + e.message); } //目前我們可能得到的系統異常主要包含以下6種:
//EvalError: raised when an error occurs executing code in eval() //RangeError: raised when a numeric variable or parameter is outside of its valid range //ReferenceError: raised when de-referencing an invalid reference //SyntaxError: raised when a syntax error occurs while parsing code in eval() //TypeError: raised when a variable or parameter is not a valid type //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); } // etc } // 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 + " /nmessage: " + e.message + " /nlineNumber: " + e.lineNumber + " /nfileName: " + e.fileName + " /nstack: " + e.stack); } else { alert( " name: " + e.name + " /nerrorNumber: " + (e.number & 0xFFFF ) + " /nmessage: " + e.message " ); } }
//JavaScript中的throw命令事實上可以拋出任何對象,並且我們可以在catch接受到此對象。例如: try{ throw new Date(); // 拋出目前時間對象 }catch (e) { alert(e.toLocaleString()); // 使用本地格式顯示目前時間 } //]]> </script> </body> </html> //不同瀏覽器下異常處理測試 <html> <head><title>try...catch...finally</title></head> <body> <script type="text/javascript"> //<![CDATA[ //不同瀏覽器下異常處理測試 //firefox3 //message : foo is not defined ;fileName : file:///D:/test/test_apply_call.html ;lineNumber : 10 ;stack : @file:///D:/test/test_apply_call.html:10 ;name : ReferenceError ; //IE7 //name : TypeError ;message : 'foo' 未定義 ;number : -2146823279 ;description : 'foo' 未定義 ; try{ foo.bar(); }catch(e){ var s = ''; for(i in e) { s += i + " : " + e[i] + " ;"; } document.write(s); } //]]> </script> </body> </html> |