程序中存在三種錯誤: (a) 語法錯誤 (b) 運行期錯誤 (c) 邏輯錯誤:
語法錯誤同樣也被稱為解析錯誤,對于傳統(tǒng)的編程語言,該錯誤出現(xiàn)先編譯的時候,對于 JavaScript 該錯誤出現(xiàn)在解釋時期。例如,下面的代碼會引起語法錯誤,因為在一行中缺少一個圓括號:
<script type="text/javascript">
<!--
window.print(;
//-->
</script>
當在 JavaScript 中出現(xiàn)了語法錯誤的時候,僅僅只是在同一個包含該語法錯誤的進程才會受到影響,其他的進程中的代碼執(zhí)行不會受到影響,盡管他們依賴的代碼中包含錯誤。
運行期錯誤也被稱為異常,通常在編譯或者解釋之后運行時會出現(xiàn)。例如,下面的代碼會造成運行期錯誤,因為它試圖調(diào)用一個不存在的方法:
<script type="text/javascript">
<!--
window.printme();
//-->
</script>
異常出現(xiàn)時會影響進程創(chuàng)建時的正常執(zhí)行,但是允許對于其他的 JavaScript 進程則可以繼續(xù)正常執(zhí)行。
邏輯錯誤是最難被追蹤的錯誤類型。這些錯誤并不是語法或者運行時錯誤造成的, 而是由于你在程序運行的邏輯上出現(xiàn)錯誤,從而導(dǎo)致你的腳本程序并不能得到你想要的結(jié)果。
你并不能捕獲這些錯誤,因為它取決于你的業(yè)務(wù)邏輯需求,你想要在你的程序中實現(xiàn)怎樣的邏輯處理。
JavaScript 的最新版本中添加了異常處理的功能。它實現(xiàn)了 try...catch...finally 結(jié)構(gòu)和 throw 操作用來處理異常。你可以捕獲程序員和運行期產(chǎn)生的異常,但是對于用戶不能捕獲 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 語句塊(或者同時包含他倆的一個語句塊)。當在 try 語句塊內(nèi)部產(chǎn)生了一個異常,這個異常就會被賦值給 e,接著 catch 語句塊被執(zhí)行。而可選的 finally 語句塊在 try/catch 之后一定會被執(zhí)行。
如下是一個例子,我們嘗試調(diào)用一個不存在的方法,這個會導(dǎo)致異常的產(chǎn)生。我們首先看下沒有 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>
接下來利用 try...catch 語句嘗試去捕獲程序的異常,并且給用戶提示一個友好的消息。如果你不想讓用戶看見這個錯誤,你也可以不讓這個消息產(chǎn)生。
<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 語句產(chǎn)生一個內(nèi)置的異?;蛘吣阕约憾ㄖ频漠惓?。之后這些異常可以被捕獲,而且捕獲后你可以采取合適的操作。
下面的是一個例子,展示如何使用 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ù)里面利用字符串,整型,布爾類型或者一個對象引起異常,接著你可以在同一個方法里面捕獲這個異常,或者在其他的函數(shù)里面利用 try...catch 語句塊捕獲異常。
onerror 事件句柄是 JavaScript 中添加的第一個為了方便錯誤處理的特性。無論任何時候在網(wǎng)頁中產(chǎn)生了異常,窗口對象就會觸發(fā) error 事件。例如:
<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 事件句柄提供了三個信息用來準確的表示錯誤的特性:
如下是一個例子顯示如何得到上面的那些信息。
<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 方法來顯示一個錯誤消息,以免在加載圖片時出現(xiàn)任何的問題:
<img src="myimage.gif"
onerror="alert('An error occurred loading the image.')" />
如果程序中產(chǎn)生錯誤,你可以在很多的 HTML 標簽中使用 onerror 來顯示合適的消息。
更多建議: