Thứ Hai, 12 tháng 11, 2018

JavaScript - Xử lý lỗi và ngoại lệ

Học lập trình Java

Có ba loại lỗi trong lập trình: (a) Lỗi cú pháp, (b) Lỗi thời gian chạy và (c) Lỗi hợp lý.

Lỗi cú pháp

Lỗi cú pháp, còn được gọi là lỗi phân tích cú pháp, xảy ra tại thời gian biên dịch trong các ngôn ngữ lập trình truyền thống và tại thời gian diễn giải trong JavaScript.

Ví dụ, dòng sau gây ra lỗi cú pháp vì nó thiếu dấu đóng ngoặc.

Link đăng ký : Khóa Học Java miễn phí
<script type="text/javascript">
   <!--
      window.print(;
   //-->
</script>
Khi một lỗi cú pháp xảy ra trong JavaScript, chỉ có mã chứa trong cùng một luồng khi lỗi cú pháp bị ảnh hưởng và phần còn lại của mã trong các chủ đề khác được thực thi giả sử không có gì trong chúng phụ thuộc vào mã chứa lỗi.

Lỗi thời gian chạy

Lỗi thời gian chạy, còn được gọi là ngoại lệ, xảy ra trong quá trình thực hiện (sau khi biên dịch / giải thích).

Ví dụ, dòng sau gây ra một lỗi thời gian chạy vì ở đây cú pháp là chính xác, nhưng khi chạy, nó đang cố gắng gọi một phương thức không tồn tại.
<script type="text/javascript">
   <!--
      window.printme();
   //-->
</script>
Các ngoại lệ cũng ảnh hưởng đến luồng mà chúng xuất hiện, cho phép các luồng JavaScript khác tiếp tục thực hiện bình thường.

Lỗi hợp lý

Lỗi logic có thể là loại lỗi khó theo dõi nhất. Các lỗi này không phải là kết quả của cú pháp hoặc lỗi thời gian chạy. Thay vào đó, chúng xảy ra khi bạn mắc sai lầm trong logic điều khiển kịch bản của bạn và bạn không nhận được kết quả mong đợi.

Bạn không thể bắt được những lỗi đó, bởi vì nó phụ thuộc vào yêu cầu nghiệp vụ của bạn loại logic bạn muốn đưa vào chương trình của mình.

Các thử ... bắt ... cuối cùng

Các phiên bản mới nhất của JavaScript đã thêm khả năng xử lý ngoại lệ. JavaScript thực hiện try ... catch ... cuối cùng là xây dựng cũng như toán tử throw để xử lý các ngoại lệ.

Bạn có thể bắt ngoại lệ do người lập trình tạo ra và thời gian chạy , nhưng bạn không thể bắt gặp lỗi cú pháp JavaScript.

Đây là thử ... bắt ... cuối cùng là cú pháp chặn
<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>
Khối thử phải được theo sau bởi chính xác một khối catch hoặc khối cuối cùng là khối (hoặc một trong hai khối).

Khi một ngoại lệ xảy ra trong khối try, ngoại lệ được đặt trong e và khối catch được thực thi. Khối cuối cùng tùy chọn thực hiện vô điều kiện sau khi thử / bắt.

Ví dụ

Dưới đây là một ví dụ mà chúng tôi đang cố gắng gọi một hàm không tồn tại mà đến lượt nó là nâng một ngoại lệ. Chúng ta hãy xem nó hoạt động như thế nào mà không thử ... bắt -
<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>

Đầu ra

Bây giờ chúng ta hãy cố gắng nắm bắt ngoại lệ này bằng cách thử ... bắt và hiển thị một thông điệp thân thiện với người dùng. Bạn cũng có thể chặn thông báo này, nếu bạn muốn ẩn lỗi này khỏi người dùng.
<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>

Đầu ra

Bạn có thể sử dụng cuối cùng khối mà sẽ luôn luôn thực hiện vô điều kiện sau khi thử / bắt. Đây là một ví dụ.
<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>

Đầu ra

Tuyên bố ném

Bạn có thể sử dụng câu lệnh throw để tăng các ngoại lệ tích hợp hoặc các ngoại lệ tùy chỉnh của bạn. Sau đó, các trường hợp ngoại lệ này có thể bị bắt và bạn có thể thực hiện một hành động thích hợp.

Thí dụ

Ví dụ sau đây minh họa cách sử dụng câu lệnh ném .
<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>

Đầu ra

Bạn có thể tăng một ngoại lệ trong một hàm bằng cách sử dụng một chuỗi, số nguyên, Boolean hoặc một đối tượng và sau đó bạn có thể nắm bắt ngoại lệ đó trong cùng chức năng như chúng ta đã làm ở trên hoặc trong một hàm khác bằng cách sử dụng khối try ... catch .

Phương thức onerror ()

Trình xử lý sự kiện onerror là tính năng đầu tiên để tạo điều kiện xử lý lỗi trong JavaScript. Sự kiện lỗi được kích hoạt trên đối tượng cửa sổ bất cứ khi nào một ngoại lệ xảy ra trên trang.
<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>

Đầu ra

Trình xử lý sự kiện onerror cung cấp ba mẩu thông tin để xác định bản chất chính xác của lỗi -

Thông báo lỗi - Cùng một thông báo mà trình duyệt sẽ hiển thị cho lỗi đã cho

URL - Tệp xảy ra lỗi

Số dòng - Số dòng trong URL đã cho gây ra lỗi

Dưới đây là ví dụ để hiển thị cách trích xuất thông tin này.

Thí dụ
<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>

Đầu ra

Bạn có thể hiển thị thông tin được trích xuất theo bất kỳ cách nào bạn cho rằng nó tốt hơn.

Bạn có thể sử dụng một phương pháp onerror , như hình dưới đây, để hiển thị một thông báo lỗi trong trường hợp có bất kỳ vấn đề trong việc tải một hình ảnh.
<img src="myimage.gif" onerror="alert('An error occurred loading the image.')" />
Bạn có thể sử dụng onerror với nhiều thẻ HTML để hiển thị các thông báo thích hợp trong trường hợp có lỗi.

Không có nhận xét nào:

Đăng nhận xét

Lập trình Java - Ngoại lệ

Một ngoại lệ (hoặc sự kiện đặc biệt) là một vấn đề phát sinh trong quá trình thực hiện chương trình. Khi xảy ra Ngoại lệ , luồng bình thường...