鍍金池/ 教程/ HTML/ JavaScript錯誤和異常處理
Javascript Math.log()方法
Javascript String.sub()方法
JavaScript表單驗(yàn)證
Javascript教程
Javascript String.fontsize()方法
Javascript Date.getUTCHours()方法
JavaScript運(yùn)算符
Javascript RegExp.ignoreCase屬性
Javascript Date.toLocaleDateString()方法
Javascript String.valueOf()方法
Javascript Date.setUTCMinutes()方法
JavaScript Switch Case
JavaScript Function() 構(gòu)造
Javascript Math.floor()方法
JavaScript頁面刷新
Javascript Math.abs()方法
Javascript Array.pop()方法
Javascript Boolean.valueOf()方法
Javascript Number.MIN_VALUE
Javascript Date.parse()方法
Javascript Math.LOG10E屬性
Javascript Math.random()方法
Javascript Date.getYear()方法
Javascript Array.some()方法
Javascript Array.filter()方法
Javascript Array.join()方法
JavaScript for循環(huán)
Javascript String.localeCompare()方法
JavaScript語法
Javascript Array.length屬性
Javascript String.strike()方法
Javascript String.constructor屬性
JavaScript Date對象
Javascript Date.setYear()方法
Javascript Math.E屬性
Javascript Math.LN10屬性
Javascript Math.sqrt()方法
Javascript Array.reverse()方法
Javascript String.length屬性
Javascript RegExp.lastIndex屬性
Javascript Arrays對象
Javascript Boolean.toSource()方法
Javascript Date.valueOf()方法
JavaScript while循環(huán)
Javascript Date.getDate()方法
Javascript Date.toUTCString()方法
Javascript Math.SQRT2屬性
Javascript Array.lastIndexOf()方法
Javascript String.slice()方法
Javascript Date.getTime()方法
Javascript Date.getSeconds()方法
Javascript RegExp.toString()方法
Javascript String.replace()方法
Javascript Array.splice()方法
Javascript多媒體
Javascript Math.atan2()方法
Javascript Date.toString()方法
Javascript Date.getUTCMinutes()方法
Javascript Date.getFullYear()方法
Javascript Date.setDate()方法
Javascript Array.slice()方法
Javascript Math.ceil()方法
Javascript Date.getHours()方法
JavaScript事件
Javascript Math.pow()方法
Javascript Math.exp()方法
Javascript Date.getMonth()方法
Javascript Date.setUTCDate()方法
Javascript Array.reduce()方法
Javascript Date setUTCMilliseconds()方法
JavaScript文檔對象模型或DOM
Javascript String.blink()方法
Javascript Number.POSITIVE_INFINITY
Javascript Math.asin()方法
JavaScript動畫
Javascript Number.MAX_VALUE
Javascript RegExp.global屬性
Javascript Date.getMinutes()方法
Javascript Date.UTC()方法
Javascript Date.getUTCMilliseconds()方法
Javascript Math.SQRT1_2屬性
Javascript Array.every()方法
Javascript String.anchor()方法
JavaScript if...else語句
Javascript Math.round()方法
Javascript Array.concat()方法
Javascript Boolean.toString()方法
Javascript Math.sin()方法
Javascript Math.max()方法
Javascript Date.setMilliseconds()方法
JavaScript對象
Javascript String.toLocaleLowerCase()方法
Javascript Math.min()方法
JavaScript傳統(tǒng)DOM
Javascript Array.unshift()方法
Javascript Date.toTimeString()方法
Javascript String.toString()方法
Javascript String.substring()方法
Javascript Array.constructor屬性
正則表達(dá)式和RegExp對象
Javascript Math.acos()方法
JavaScript Boolean.constructor()方法
Javascript RegExp.source屬性
Javascript Math.PI屬性
JavaScript W3C DOM
Javascript Date.setMinutes()方法
JavaScript Cookies
JavaScript循環(huán)控制
Javascript Array.push()方法
Javascript Date.getMilliseconds()方法
Javascript Date.getUTCSeconds()方法
Javascript String.charAt()方法
Javascript Date.getUTCFullYear()方法
JavaScript對話框
Javascript String.toUpperCase()方法
Javascript Math.atan()方法
Javascript Number.NEGATIVE_INFINITY
Javascript Date.getUTCDay()方法
Javascript String.search()方法
Javascript String.substr()方法
Javascript Array.toString()方法
Javascript String.sup()方法
Javascript String.charCodeAt()方法
Javascript Math.cos()方法
Javascript String.bold()方法
Javascript Math.tan()方法
Javascript RegExp.test()方法
Javascript Date.toDateString()方法
JavaScript錯誤和異常處理
JavaScript函數(shù)
Javascript String.link()方法
JavaScript嵌套函數(shù)
Javascript Boolean對象
Javascript Array.shift()方法
Javascript String.small()方法
Javascript Date.getUTCMonth()方法
Javascript String.lastIndexOf()方法
Javascript Math.toSource()方法
Javascript Array.reduceRight()方法
JavaScript變量和數(shù)據(jù)類型
Javascript Number.NaN
Javascript Array.toSource()方法
Javascript頁面打印
Javascript Date.setUTCFullYear()方法
Javascript Array.indexOf()方法
Javascript RegExp.exec()方法
Javascript Date.setUTCSeconds()方法
Javascript String.match()方法
Javascript Date.setSeconds()方法
Javascript Array.sort()方法
Javascript Math.LOG2E,屬性
Javascript Math對象
Javascript Math.LN2屬性
Javascript String對象
JavaScript頁面重定向
Javascript RegExp.toSource()方法
Javascript Date.getUTCDate()方法
Javascript String.concat()方法
Javascript Array.map()方法
Javascript Date.toSource()方法
Javascript String.toLowerCase()方法
在HTML文件放置JavaScript
JavaScript for...in 循環(huán)
Javascript Object.prototype
Javascript RegExp.constructor屬性
JavaScript void關(guān)鍵詞
Javascript Date.getTimezoneOffset()方法
Javascript RegExp.multiline屬性
Javascript Date()函數(shù)
Javascript Date.setUTCHours()方法
JavaScript Array.forEach()方法
在瀏覽器中啟用JavaScript
Javascript Date.setTime()方法
Javascript String.toLocaleUpperCase()方法
Javascript Date.setHours()方法
Javascript Date.constructor屬性
Javascript String.fixed()方法
Javascript Number對象
Javascript String.italics()方法
Javascript String.big()方法
Javascript String.fontcolor()方法
Javascript Date.getDay()方法
JavaScript IE4 DOM
Javascript Date.setMonth()方法
Javascript Date.setFullYear()方法
JavaScript函數(shù)字面值

JavaScript錯誤和異常處理

有三種類型的編程錯誤:(1)語法錯誤和(2)運(yùn)行時錯誤(3)邏輯錯誤:

語法錯誤:

語法錯誤,也被稱為解析錯誤,在編譯時進(jìn)行傳統(tǒng)的編程語言,并出現(xiàn)在JavaScript解釋時。

例如,下面一行將導(dǎo)致一個語法錯誤,因?yàn)樗鄙僖粋€右括號:

<script type="text/javascript">
<!--
window.print(;
//-->
</script>

當(dāng)一個語法錯誤在JavaScript中出現(xiàn),只有在同一個線程中包含的語法錯誤的影響,在其他線程的代碼被執(zhí)行;代碼依賴于包含錯誤的代碼不會被執(zhí)行。

運(yùn)行時錯誤:

執(zhí)行(編譯/解釋后)在運(yùn)行時錯誤,也被稱為異常,會引發(fā)。

例如,下面一行將導(dǎo)致運(yùn)行時錯誤,因?yàn)檫@里的語法是正確的,但在運(yùn)行時它正試圖調(diào)用非存在的方法:

<script type="text/javascript">
<!--
window.printme();
//-->
</script>

例外情況也影響到它們發(fā)生的線程,允許其他JavaScript線程繼續(xù)正常執(zhí)行。

邏輯錯誤:

邏輯錯誤可能是最困難的類型的錯誤跟蹤。這些錯誤是不是一個語法或運(yùn)行時錯誤的結(jié)果。相反,當(dāng)發(fā)生一個錯誤的驅(qū)動腳本邏輯,你沒有得到所期望的結(jié)果。

你可能無法抓到這些錯誤,因?yàn)檫@取決于程序是什么類型的邏輯是基于業(yè)務(wù)需求。

try...catch...finally 語句:

JavaScript的最新版本中添加的異常處理能力。JavaScript實(shí)現(xiàn) try ... catch... finally結(jié)構(gòu)以及拋出操作來處理異常。

你可以捕獲程序員生成和運(yù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塊(或兩者之一)。當(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塊將永遠(yuǎn)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)置異常或自定義異常。后來這些異??梢员徊东@并可以采取適當(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事件處理程序是第一個特點(diǎn),方便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)的信息。