詳解JavaScript中的異常處理方法
有三種類型的編程錯誤:(1)語法錯誤和(2)運行時錯誤(3)邏輯錯誤:
語法錯誤:
語法錯誤,也被稱為解析錯誤,在編譯時進行傳統(tǒng)的編程語言,并出現(xiàn)在JavaScript解釋時。
例如,下面一行將導(dǎo)致一個語法錯誤,因為它缺少一個右括號:
<script type="text/javascript"> <!-- window.print(; //--> </script>
當(dāng)一個語法錯誤在JavaScript中出現(xiàn),只有在同一個線程中包含的語法錯誤的影響,在其他線程的代碼被執(zhí)行;代碼依賴于包含錯誤的代碼不會被執(zhí)行。
運行時錯誤:
執(zhí)行(編譯/解釋后)在運行時錯誤,也被稱為異常,會引發(fā)。
例如,下面一行將導(dǎo)致運行時錯誤,因為這里的語法是正確的,但在運行時它正試圖調(diào)用非存在的方法:
<script type="text/javascript"> <!-- window.printme(); //--> </script>
例外情況也影響到它們發(fā)生的線程,允許其他JavaScript線程繼續(xù)正常執(zhí)行。
邏輯錯誤:
邏輯錯誤可能是最困難的類型的錯誤跟蹤。這些錯誤是不是一個語法或運行時錯誤的結(jié)果。相反,當(dāng)發(fā)生一個錯誤的驅(qū)動腳本邏輯,你沒有得到所期望的結(jié)果。
你可能無法抓到這些錯誤,因為這取決于程序是什么類型的邏輯是基于業(yè)務(wù)需求。
try...catch...finally 語句:
JavaScript的最新版本中添加的異常處理能力。JavaScript實現(xiàn) try ... catch... finally結(jié)構(gòu)以及拋出操作來處理異常。
你可以捕獲程序員生成和運行時異常,但不能捕獲JavaScript語法錯誤。
這里是 try...catch...finally 塊語法:
<script type="text/javascript">
<!--
try {
// Code to run
[break;]
} catch ( e ) {
// Code to run if an exception occurs
[break;]
}[ finally {
// Code that is always executed regardless of
// an exception occurring
}]
//-->
</script>
try塊必須后跟只有一個catch塊或者一個finally塊(或兩者之一)。當(dāng)一個異常在try塊時,除被放置在e和catch塊被執(zhí)行。 try/catch語句后的可選finally塊無條件地執(zhí)行。
示例:
下面是一個例子,我們正試圖調(diào)用一個不存在的函數(shù),這將引發(fā)異常。讓我們來看看它的行為,不具有try ... catch:
<html>
<head>
<script type="text/javascript">
<!--
function myFunc()
{
var a = 100;
alert("Value of variable a is : " + a );
}
//-->
</script>
</head>
<body>
<p>Click the following to see the result:</p>
<form>
<input type="button" value="Click Me" onclick="myFunc();" />
</form>
</body>
</html>
現(xiàn)在,讓我們嘗試使用 try ... catch 捕獲這個異常,并顯示一個用戶友好的消息。也可以取消此消息,如果要隱藏從用戶這個錯誤。
<html>
<head>
<script type="text/javascript">
<!--
function myFunc()
{
var a = 100;
try {
alert("Value of variable a is : " + a );
} catch ( e ) {
alert("Error: " + e.description );
}
}
//-->
</script>
</head>
<body>
<p>Click the following to see the result:</p>
<form>
<input type="button" value="Click Me" onclick="myFunc();" />
</form>
</body>
</html>
可以使用finally塊將永遠try/catch語句后,無條件地執(zhí)行。下面是一個例子:
<html>
<head>
<script type="text/javascript">
<!--
function myFunc()
{
var a = 100;
try {
alert("Value of variable a is : " + a );
}catch ( e ) {
alert("Error: " + e.description );
}finally {
alert("Finally block will always execute!" );
}
}
//-->
</script>
</head>
<body>
<p>Click the following to see the result:</p>
<form>
<input type="button" value="Click Me" onclick="myFunc();" />
</form>
</body>
</html>
throw 語句:
可以使用throw語句來提高你的內(nèi)置異?;蜃远x異常。后來這些異??梢员徊东@并可以采取適當(dāng)?shù)男袆印?/p>
以下是表示throw語句的用法的例子。
<html>
<head>
<script type="text/javascript">
<!--
function myFunc()
{
var a = 100;
var b = 0;
try{
if ( b == 0 ){
throw( "Divide by zero error." );
}else{
var c = a / b;
}
}catch ( e ) {
alert("Error: " + e );
}
}
//-->
</script>
</head>
<body>
<p>Click the following to see the result:</p>
<form>
<input type="button" value="Click Me" onclick="myFunc();" />
</form>
</body>
</html>
您可以使用字符串,整數(shù),布爾或?qū)ο笤谝粋€函數(shù)拋出一個異常,那么可以捕捉例外在相同的函數(shù),我們在上面做了,或者使用try ... catch塊在其他的函數(shù)。
onerror() 語法
onerror事件處理程序是第一個特點,方便JavaScript處理錯誤。錯誤事件被觸發(fā)窗口對象,每當(dāng)一個異常頁面上出現(xiàn)。例如:
<html>
<head>
<script type="text/javascript">
<!--
window.onerror = function () {
alert("An error occurred.");
}
//-->
</script>
</head>
<body>
<p>Click the following to see the result:</p>
<form>
<input type="button" value="Click Me" onclick="myFunc();" />
</form>
</body>
</html>
onerror事件處理程序提供了三條信息,以找出錯誤的確切性質(zhì):
- 錯誤消息 . 瀏覽器將顯示給定的錯誤相同的消息
- URL . 在發(fā)生錯誤的文件
- 行號. 在導(dǎo)致錯誤的URL給出的行號
這里是例子來說明如何提取此信息
<html>
<head>
<script type="text/javascript">
<!--
window.onerror = function (msg, url, line) {
alert("Message : " + msg );
alert("url : " + url );
alert("Line number : " + line );
}
//-->
</script>
</head>
<body>
<p>Click the following to see the result:</p>
<form>
<input type="button" value="Click Me" onclick="myFunc();" />
</form>
</body>
</html>
可以顯示在任何方式,你覺得這是更好的提取信息。
可以使用onError方法來顯示錯誤消息的情況下沒有在如下加載圖像的任何問題:
<img src="myimage.gif"
onerror="alert('An error occurred loading the image.')" />
可以使用的onerror許多HTML標(biāo)記錯誤的情況下顯示相應(yīng)的信息。
相關(guān)文章
ASP.NET實現(xiàn)Repeater控件的數(shù)據(jù)綁定
這篇文章介紹了ASP.NET實現(xiàn)Repeater控件數(shù)據(jù)綁定的方法,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-07-07
JavaScript與DOM組合動態(tài)創(chuàng)建表格實例
這篇文章簡單介紹了DOM 1.0一些基本而強大的方法以及如何在JavaScript中使用它們;你可以學(xué)到如何動態(tài)地創(chuàng)建、獲取、控制和刪除HTML元素2012-12-12
關(guān)于js中alert彈出窗口文本換行問題簡單詳細說明
js中alert彈出窗口文本換行是一個小問題,本人很是郁悶,于是搜集整理下,曬出來和大家分享2012-12-12
JavaScript中用getDate()方法返回指定日期的教程
這篇文章主要介紹了JavaScript中用getDate()方法返回指定日期的教程,是JS入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下2015-06-06

