NỘI DUNG BÀI VIẾT
Trong bài viết này, bạn sẽ tìm hiểu về các câu lệnh throw trong JavaScript. Ở bài viết trước, bạn đã học cách xử lý ngoại lệ bằng cách sử dụng câu lệnh try…catch trong JavaScript. Câu lệnh try...catch
xử lý ngoại lệ theo cách tiêu chuẩn do JavaScript cung cấp. Tuy nhiên, bạn có thể sử dụng câu lệnh throw
để bỏ qua các ngoại lệ do người dùng định nghĩa.
Trong JavaScript, câu lệnh throw xử lý các ngoại lệ do người dùng định nghĩa. Ví dụ: nếu một số xác định chia cho 0 và nếu bạn cần coi Infinity là một ngoại lệ, bạn có thể sử dụng câu lệnh throw
để xử lý ngoại lệ đó.
Câu lệnh throw
Cú pháp của câu lệnh throw
là:
throw expression;
Code language: JavaScript (javascript)
Ở đây, expression
là biểu thức, xác định giá trị của ngoại lệ.
Ví dụ:
const number = 5;
throw number/0; // tạo ra một ngoại lệ khi chia cho 0
Code language: JavaScript (javascript)
Lưu ý: Biểu thức có thể là chuỗi, boolean, số hoặc đối tượng,…
Câu lệnh throw với try…catch
Cú pháp của try...catch...throw
là:
try {
// khối try
throw exception;
}
catch (error) {
// khối catch
}
Code language: PHP (php)
Lưu ý: Khi câu lệnh throw
được thực thi, nó sẽ thoát ra khỏi khối try
và đi đến khối catch
. Và đoạn mã bên dưới câu lệnh throw
không được thực thi.
Ví dụ: try…catch…throw
let number = 40;
try {
if(number > 50) {
console.log('OK');
}
else {
// Câu lệnh throw do người dùng định nghĩa
throw new Error('The number is low');
}
// Nếu throw được thực thi, đoạn code bên dưới sẽ không được thực thi
console.log('hello');
}
catch(error) {
console.log('Lỗi đã được bắt!');
console.log('Thông báo lỗi: ' + error);
}
Code language: JavaScript (javascript)
Output
Lỗi đã được bắt!
Error message: Error: The number is low
Code language: JavaScript (javascript)
Trong chương trình trên, nếu số nhỏ hơn 51, một lỗi sẽ xảy ra. Và lỗi đó được ném ra bằng cách sử dụng câu lệnh throw
.
Câu lệnh throw
xác định chuỗi The number is low
là một biểu thức
Lưu ý: Bạn cũng có thể sử dụng các trình tạo lỗi được tích hợp sẵn cho các lỗi tiêu chuẩn: TypeError
, SyntaxError
, ReferenceError
, TypeError
, EvalError
, InternalError
và RangeError
.
Ví dụ:
throw new ReferenceError('this is reference error');
Code language: JavaScript (javascript)
Rethrow ngoại lệ
Bạn cũng có thể sử dụng câu lệnh throw
bên trong khối catch
để ném lại một ngoại lệ. Ví dụ:
let number = 5;
try {
// Câu lệnh throw do người dùng định nghĩa
throw new Error('This is the throw');
}
catch(error) {
console.log('Lỗi đã được bắt!');
if( number + 8 > 10) {
// xử lý ngoại lệ
console.log('Thông báo lỗi: ' + error);
console.log('Lỗi đã được giải quyết');
}
else {
// không thể xử lý ngoại lệ
// ném lại ngoại lệ
throw new Error('The value is low');
}
}
Code language: JavaScript (javascript)
Output
Lỗi đã được bắt!
Thông báo lỗi: Error: This is the throw
Lỗi đã được giải quyết
Code language: JavaScript (javascript)
Trong chương trình trên, câu lệnh throw
được sử dụng trong khối try
để bắt một ngoại lệ. Và câu lệnh throw
được ném lại trong khối catch
được thực thi nếu khối catch
không thể xử lý ngoại lệ.
Ở đây, khối catch
xử lý ngoại lệ và không có lỗi xảy ra. Do đó, câu lệnh throw
không được ném lại.
Nếu lỗi không được xử lý bởi khối catch, câu lệnh throw
sẽ được ném lại với thông báo lỗi Uncaught Error: The value is low
.
Cùng đón chờ các bài hướng dẫn về ngoại lệ trong JavaScript trong các bài viết tiếp theo nhé!
Hãy tham gia nhóm Học lập trình để thảo luận thêm về các vấn đề cùng quan tâm.