Các ngoại lệ trong JavaScript và cách xử lý tương ứng | Laptrinhcanban.com

Các ngoại lệ trong JavaScript và cách xử lý tương ứng

Cùng tìm hiểu về Các ngoại lệ trong JavaScript. Bạn sẽ biết các loại ngoại lệ (Exception) trong JavaScrip và cách xử lý chúng trong bài học này.

Các ngoại lệ trong JavaScript

Trong JavaScript có tất cả 8 loại ngoại lệ (Exception) như bảng sau đây:

Tên ngoại lệý nghĩa
ErrorLỗi thông thường
EvalErrorLỗi từ hàm eval()
InternalErrorLỗi nội bộ JavaScript
RangeErrorLỗi chỉ định giá trị nằm ngoài phạm vi
ReferenceErrorLỗi tham chiếu thất bại
SyntaxErrorLỗi cú pháp JavaScript
TypeErrorLỗi sai kiểu dữ liệu
URIErrorLỗi từ hàm encodeURI() hoặc decodeURI()

Ví dụ với phương thức toString() của Number Object, chúng ta chỉ có thể chỉ định đối số có giá trị từ 2 đến 36 mà thôi. Nếu như chỉ định một giá trị nằm ngoài phạm vi này, lỗi RangeError sẽ bị trả về:

let num = 10;
console.log(num.toString(100));
//> RangeError: toString() radix argument must be between 2 and 36

Lại nữa, có thể có nhiều loại ngoại lệ khác nhau được trả về từ cùng một xử lý. Ví dụ với phương thức toFixed() của Number Object, chúng ta chỉ có thể chỉ định đối số có giá trị từ 0 đến 100, và lỗi RangeError sẽ trả về nếu chỉ định một giá trị nằm ngoài phạm vi. Tuy nhiên đồng thời thì chúng ta cũng chỉ có thể chỉ định kiểu sổ đối với phương thức này, do đó nếu chỉ định một kiểu ngoài kiểu số thì lỗi TypeError sẽ trả về. Và tất nhiên nếu viết sai cú pháp, lỗi SyntaxError cũng sẽ được trả về.

let num = 3.14;
console.log(num.toFixed(1000));
//> RangeError: toFixed() digits argument must be between 0 and 100

let str = '3.14';
console.log(str.toFixed());
//> TypeError: str.toFixed is not a function

console.log(24.toFixed());
//> SyntaxError: Invalid or unexpected token

Để bắt và xử lý các ngoại lệ này, chúng ta sử dụng tới lệnh try catch mà Kiyoshi đã hướng dẫn trong bài try…catch trong JavaScript. Tuy nhiên chúng ta còn có thể thực hiện các xử lý khác nhau tuỳ thuộc vào loại ngoại lệ đã xảy ra.

Xử lý tuỳ theo loại ngoại lệ trong JavaScript

Với cú pháp try…catch thông thường, tất cả các loại ngoại lệ đều được xử lý một cách giống nhau bằng các xử lý được mô tả trong khối catch, như ví dụ sau đây:

function returnFixed(num, digits){
try{
return num.toFixed(digits)
} catch(e) {
console.error(e);
return null;
}
}

console.log('Start');

console.log(returnFixed(3.87654, 3));
console.log(returnFixed(3.87654, 1000));
console.log(returnFixed('3.87654', 1000));

console.log('End');

Với ví dụ này, bất kể ngoại lệ xảy ra thuộc kiểu nào thì nó cũng đều được in ra nội dung như sau:

Start
3.877
RangeError: toFixed() digits argument must be between 0 and 100
null
TypeError: num.toFixed is not a function
null
End

Tuy nhiên chúng ta cũng có thể viết các xử lý tuỳ thuộc vào loại ngoại lệ xảy ra với cú pháp sau đây:

try{
    //Các câu lệnh cần chạy
    ・・・
} catch(e) {
    //Các xử lý khi chạy code trên bị lỗi
    ・・・
}

try{
  //Các câu lệnh cần chạy
    ・・・
} catch(e) {
  if (e instanceof RangeError){
     // Các xử lý khi lỗi RangeError trả về
     ・・・
     } else if (e instanceof TypeError){
     // Các xử lý khi lỗi TypeError trả về
     ・・・
  } else {
     // Các xử lý khi các ngoại lệ khác trả về
     ・・・
  }
}

Ví dụ, chúng ta bắt và xử lý cho từng ngoại lệ trả về trong ví dụ trên như sau:

function returnFixed(num, digits){
try{
return num.toFixed(digits)
} catch(e) {
if (e instanceof RangeError){
console.error('RangeError');
return null;
} else if (e instanceof TypeError){
console.error('TypeError');
return null;
} else {
console.error(e);
return null;
}
}
}

console.log('Start');

console.log(returnFixed(3.87654, 3));
console.log(returnFixed(3.87654, 1000));
console.log(returnFixed('3.87654', 1000));

console.log('End');

Với ví dụ này, từng kiểu ngoại lệ trả về sẽ được phân biệt và thực thi các xử lý tương ứng với nó, và trả về kết quả như sau:

Start
3.877
RangeError
null
TypeError
null
End

Tổng kết

Trên đây Kiyoshi đã hướng dẫn bạn về các ngoại lệ trong JavaScript và cách xử lý tương ứng rồi. Để nắm rõ nội dung bài học hơn, bạn hãy thực hành viết lại các ví dụ của ngày hôm nay nhé.

Và hãy cùng tìm hiểu những kiến thức sâu hơn về JavaScript trong các bài học tiếp theo.

Hãy chia sẻ và cùng lan tỏa kiến thức lập trình Nhật Bản tại Việt Nam!

HOME>> >>

Profile
きよしです!笑

Tác giả : Kiyoshi (Chis Thanh)

Kiyoshi là một cựu du học sinh tại Nhật Bản. Sau khi tốt nghiệp đại học Toyama năm 2017, Kiyoshi hiện đang làm BrSE tại Tokyo, Nhật Bản.