JavaScript(JS)编程中有语法错误,运行时错误,和逻辑错误,逻辑错误可能是最难追踪的错误类型。代码中的逻辑中犯了错误,并且没有得到预期的结果时,就会发生错误异常。捕获这些错误异常,就需要使用try catch finally来处理,本文就主要介绍一下使用try catch finally 进行错误异常处理。

1、try...catch...finally语法

 运行时错误,也称为异常,发生在执行期间(在编译/解释之后)。使用try...catch...finally可以捕获编程代码中的异常情况和运行时异常,但不能捕获JavaScript语法错误。

例如,

<script type = "text/javascript">
      try {
         // 运行的代码
         [break;]
      } 
      catch ( e ) {
         // 发生异常时运行的代码
         [break;]
      }
      finally {
         // 无论异常发生,始终执行的代码,finally代码块不需要可以不写
      }
</script>

注意try块后面必须紧跟一个catch块或一个finally块(或两者之一)。当try块中发生异常时,将异常放在e中并执行catch块。可选的finally块在try/catch之后无条件执行。

try...catch使用示例如下,

<html>
   <head>      
      <script type = "text/javascript">
          function myFunc() {
               var a = 100;
               try {
                  alert("a = " + a );
               } 
               catch ( e ) {
                  alert("Error: " + e.description );
               }
              try {
                  alert("b = " + b);
               } 
               catch ( e ) {
                  alert("Error: " + e.description );
               }         
            }
      </script>      
   </head>
   <body>
      <p>单击下面以查看结果:</p>
      <form>
         <input type = "button" value = "点击" onclick = "myFunc();" />
      </form>      
   </body>
</html>

try...catch...finally使用示例如下,

<html>
   <head>      
      <script type = "text/javascript">
          function myFunc() {
               var a = 100;
               try {
                  alert("a = " + a );
               } 
               catch ( e ) {
                  alert("Error: " + e.description );
               }
              finally {
                  alert("Finally block will always execute!" );
               }
              try {
                  alert("b = " + b);
               } 
               catch ( e ) {
                  alert("Error: " + e.description );
               }         
              finally {
                  alert("Finally block will always execute!" );
               }
            }
      </script>      
   </head>
   <body>
      <p>单击下面以查看结果:</p>
      <form>
         <input type = "button" value = "点击" onclick = "myFunc();" />
      </form>      
   </body>
</html>

2、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>单击下面以查看结果:</p>
      <form>
         <input type = "button" value = "点击" onclick = "myFunc();" />
      </form>
   </body>
</html>

注意:可以使用字符串、整数、布尔值或对象在一个函数中引发异常,然后你可以在上面我们做的同一个函数中捕获该异常,或者在另一个函数中使用try…catch块。

3、onerror()方法

onerror事件处理程序是JavaScript中第一个方便错误处理的特性。每当页面上发生异常时,都会在窗口对象上触发onerror事件。

例如,

<html>
   <head>
      <script type = "text/javascript">
            window.onerror = function () {
               alert("An error occurred.");
            }
      </script>
   </head>
   <body>
      <p>单击以下内容查看结果:</p>
      <form>
         <input type = "button" value = "点击" onclick = "myFunc();" />
      </form>
   </body>
</html>

onerror事件处理程序提供了三个参数来确定错误的确定错误信息

msg:第一个参数,与浏览器显示的给定错误相同的消息。

url:每二个参数,出现错误的文件。

line:第三个参数,在给定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>单击以下内容查看结果: </p>
      <form>
         <input type = "button" value = "点击" onclick = "myFunc();" />
      </form>
   </body>
</html>

或者

<img src="myimage.gif" onerror="alert('An error occurred loading the image.')" />


推荐文档