【轉】詳解JavaScript中的異常處理方法

來源:互聯網
上載者:User

標籤:final   語法錯誤   跟蹤   邏輯   for   ==   deb   bsp   result   

有三種類型的編程錯誤:(1)語法錯誤和(2)執行階段錯誤(3)邏輯錯誤:
語法錯誤:

語法錯誤,也被稱為解析錯誤,在編譯時間進行傳統的程式設計語言,並出現在JavaScript解釋時。

例如,下面一行將導致一個語法錯誤,因為它缺少一個右括弧:

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

當一個語法錯誤在JavaScript中出現,只有在同一個線程中包含的語法錯誤的影響,在其他線程的代碼被執行;代碼依賴於包含錯誤的代碼不會被執行。
執行階段錯誤:

執行(編譯/解釋後)在執行階段錯誤,也被稱為異常,會引發。

例如,下面一行將導致執行階段錯誤,因為這裡的文法是正確的,但在運行時它正試圖調用非存在的方法:

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

例外情況也影響到它們發生的線程,允許其他JavaScript線程繼續正常執行。
邏輯錯誤:

邏輯錯誤可能是最困難的類型的錯誤跟蹤。這些錯誤是不是一個文法或執行階段錯誤的結果。相反,當發生一個錯誤的驅動指令碼邏輯,你沒有得到所期望的結果。

你可能無法抓到這些錯誤,因為這取決於程式是什麼類型的邏輯是基於業務需求。
try...catch...finally 語句:

JavaScript的最新版本中添加的異常處理能力。JavaScript實現 try ... catch... finally結構以及拋出操作來處理異常。

你可以捕獲程式員產生和運行時異常,但不能捕獲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塊時,除被放置在e和catch塊被執行。 try/catch語句後的可選finally塊無條件地執行。
樣本:

下面是一個例子,我們正試圖調用一個不存在的函數,這將引發異常。讓我們來看看它的行為,不具有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 捕獲這個異常,並顯示一個方便使用的訊息。也可以取消此訊息,如果要隱藏從使用者這個錯誤。

<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語句後,無條件地執行。下面是一個例子:

<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語句來提高你的內建異常或自訂異常。後來這些異常可以被捕獲並可以採取適當的行動。

以下是表示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>

您可以使用字串,整數,布爾或對象在一個函數拋出一個異常,那麼可以捕捉例外在相同的函數,我們在上面做了,或者使用try ... catch塊在其他的函數。
onerror() 文法

onerror事件處理常式是第一個特點,方便JavaScript處理錯誤。錯誤事件被觸發視窗對象,每當一個異常頁面上出現。例如:

<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事件處理常式提供了三條資訊,以找出錯誤的確切性質:

  1.     錯誤訊息 . 瀏覽器將顯示給定的錯誤相同的訊息
  2.     URL . 在發生錯誤的檔案
  3.     行號. 在導致錯誤的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標記錯誤的情況下顯示相應的資訊。

 

您可能感興趣的

  1. 詳解1000+項目資料分析出來的10大JavaScript錯誤
  2. 10個用Console來Debug的進階技巧
  3. 有瀏覽器的地方就有Fundebug
  4. Debug前端HTML/CSS

【轉】詳解JavaScript中的異常處理方法

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.