ES6 - Xử lý lỗi

Có ba loại lỗi trong lập trình: Lỗi cú pháp, Lỗi thời gian chạy và Lỗi logic.

Lỗi cú pháp

Lỗi cú pháp, còn được gọi là parsing errors, xảy ra tại thời điểm biên dịch trong các ngôn ngữ lập trình truyền thống và tại thời điểm diễn giải trong JavaScript. Khi lỗi cú pháp xảy ra trong JavaScript, chỉ mã chứa trong cùng một chuỗi với lỗi cú pháp bị ảnh hưởng và phần còn lại của mã trong các chuỗi khác được thực thi giả sử không có gì trong đó 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à exceptions, xảy ra trong quá trình thực thi (sau khi biên dịch / thông dịch). Các ngoại lệ cũng ảnh hưởng đến luồng mà chúng xảy ra, cho phép các luồng JavaScript khác tiếp tục thực thi bình thường.

Lỗi lôgic

Lỗi logic có thể là loại lỗi khó theo dõi nhất. Những lỗi này không phải là kết quả của lỗi 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 lỗi logic điều khiển tập lệnh của bạn và bạn không nhận được kết quả như mong đợi.

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

JavaScript ném các phiên bản của đối tượng Lỗi khi xảy ra lỗi thời gian chạy. Bảng sau liệt kê các loại được xác định trước của đối tượng Lỗi.

Sr.No Đối tượng & Mô tả Lỗi
1

EvalError

Tạo một phiên bản đại diện cho một lỗi xảy ra liên quan đến chức năng chung eval().

2

RangeError

Tạo một phiên bản đại diện cho một lỗi xảy ra khi một biến số hoặc tham số nằm ngoài phạm vi hợp lệ của nó.

3

ReferenceError

Tạo một phiên bản đại diện cho một lỗi xảy ra khi tham chiếu đến một tham chiếu không hợp lệ.

4

SyntaxError

Tạo một phiên bản đại diện cho một lỗi cú pháp xảy ra khi phân tích cú pháp mã.

5

TypeError

Tạo một phiên bản đại diện cho một lỗi xảy ra khi một biến hoặc tham số không thuộc loại hợp lệ.

6

URIError

Tạo một phiên bản đại diện cho một lỗi xảy ra khi encodeURI() hoặc là decodeURI() được truyền các tham số không hợp lệ.

Ngoại lệ ném

Một lỗi (được xác định trước hoặc do người dùng xác định) có thể được phát sinh bằng cách sử dụng throw statement. Sau đó, những ngoại lệ này có thể được ghi lại và bạn có thể thực hiện một hành động thích hợp. Sau đây là cú pháp cho tương tự.

Cú pháp: Ném một ngoại lệ chung

throw new Error([message]) 
OR 
throw([message])

Cú pháp: Ném một ngoại lệ cụ thể

throw new Error_name([message])

Xử lý ngoại lệ

Xử lý ngoại lệ được thực hiện với try...catch statement. Khi chương trình gặp phải ngoại lệ, chương trình sẽ kết thúc theo cách không thân thiện. Để bảo vệ khỏi lỗi không lường trước này, chúng ta có thể bọc mã của mình trong câu lệnh try ... catch.

Khối try phải được theo sau bởi chính xác một khối catch hoặc một khối cuối cùng (hoặc một trong cả hai). 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 thi vô điều kiện sau khi thử / bắt

Sau đây là cú pháp cho tương tự.

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  
}]

Thí dụ

var a = 100; 
var b = 0; 
try { 
   if (b == 0 ) { 
      throw(“Divide by zero error.”); 
   } else { 
      var c = a / b; 
   } 
} 
catch( e ) { 
   console.log("Error: " + e ); 
}

Đầu ra

Kết quả sau được hiển thị khi thực hiện thành công đoạn mã trên.

Error: Divide by zero error

Note - Lưu ý: Bạn có thể nêu ra một ngoại lệ trong một hàm và sau đó bạn có thể nắm bắt ngoại lệ đó trong cùng một hàm hoặc trong hàm người gọi bằng cách sử dụng try...catch khối.

Phương thức onerror ()

Các onerrortrình xử lý sự kiện là tính năng đầu tiên giúp 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.

Thí dụ

<html> 
   <head> 
      <script type = "text/javascript"> 
         window.onerror  =  function () {  
            document.write ("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

Kết quả sau được hiển thị khi thực hiện thành công đoạn mã trên.

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

  • Error message - Thông báo tương tự mà trình duyệt sẽ hiển thị cho lỗi đã cho.

  • URL - Tệp có lỗi xảy ra.

  • Line number - Số dòng trong URL nhất định gây ra lỗi.

Ví dụ sau đây cho thấy 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) {  
            document.write ("Message : " + msg );  
            document.write ("url : " + url );  
            document.write ("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>

Lỗi tùy chỉnh

JavaScript hỗ trợ khái niệm về lỗi tùy chỉnh. Ví dụ sau đây giải thích tương tự.

Ví dụ 1: Lỗi tùy chỉnh với thông báo mặc định

function MyError(message) { 
   this.name = 'CustomError'; 
   this.message = message || 'Error raised with default message'; 
} 
try { 
   throw new MyError(); 
} catch (e) {  
   console.log(e.name);      
   console.log(e.message);  // 'Default Message' 
}

Kết quả sau được hiển thị khi thực hiện thành công đoạn mã trên.

CustomError 
Error raised with default message

Ví dụ 2: Lỗi tùy chỉnh với thông báo lỗi do người dùng xác định

function MyError(message) { 
   this.name = 'CustomError'; 
   this.message = message || 'Default Error Message';  
} try { 
   throw new MyError('Printing Custom Error message'); 
} 
catch (e) { 
   console.log(e.name);      
   console.log(e.message);  
}

Kết quả sau được hiển thị khi thực hiện thành công đoạn mã trên.

CustomError 
Printing Custom Error message