Các khối try
, catch
và finally
được sử dụng để xử lý các ngoại lệ (loại lỗi). Trước khi bạn tìm hiểu về chúng, bạn cần biết về các loại lỗi trong lập trình.
Các Loại Lỗi
Trong lập trình, có thể có hai loại lỗi trong mã:
Lỗi Cú Pháp: Lỗi trong cú pháp. Ví dụ, nếu bạn viết consol.log('kết quả của bạn');
, chương trình trên đưa ra lỗi cú pháp. Việc viết sai chính tả của console
là một lỗi trong mã trên.
Lỗi Thời Gian Chạy: Loại lỗi này xảy ra trong quá trình thực thi chương trình. Ví dụ,
gọi một hàm không hợp lệ hoặc một biến không tồn tại.
Những lỗi xảy ra trong thời gian chạy được gọi là ngoại lệ. Bây giờ, hãy xem cách bạn có thể xử lý những ngoại lệ này.
Khối Lệnh try...catch
trong JavaScript
Câu lệnh try...catch
được sử dụng để xử lý các ngoại lệ. Cú pháp của nó là:
try {
// body of try
}
catch(error) {
// body of catch
}
Mã chính nằm bên trong khối try
. Trong quá trình thực thi khối try
, nếu xảy ra lỗi nào, chương trình sẽ chuyển đến khối catch
. Khối catch
xử lý lỗi theo các lệnh catch
.
Nếu không có lỗi nào xảy ra, mã bên trong khối try
sẽ được thực thi và khối catch
sẽ được bỏ qua.
Ví dụ 1: Hiển thị Biến Chưa Được Khai Báo
// program to show try...catch in a program
const numerator= 100, denominator = 'a';
try {
console.log(numerator/denominator);
// forgot to define variable a
console.log(a);
}
catch(error) {
console.log('An error caught');
console.log('Error message: ' + error);
}
Kết Quả
NaN
An error caught
Error message: ReferenceError: a is not defined
Trong chương trình trên, một biến không được định nghĩa. Khi bạn cố gắng in biến a, chương trình sẽ đưa ra một lỗi. Lỗi đó được bắt trong khối catch
.
Khối Lệnh try...catch...finally
trong JavaScript
Bạn cũng có thể sử dụng câu lệnh try...catch...finally
để xử lý các ngoại lệ. Khối finally
được thực thi cả khi mã chạy thành công hoặc khi xảy ra lỗi.
Cú pháp của khối try...catch...finally
là:
try {
// try_statements
}
catch(error) {
// catch_statements
}
finally() {
// codes that gets executed anyway
}
Ví dụ 2: Ví dụ về try…catch…finally
const numerator= 100, denominator = 'a';
try {
console.log(numerator/denominator);
console.log(a);
}
catch(error) {
console.log('An error caught');
console.log('Error message: ' + error);
}
finally {
console.log('Finally will execute every time');
}
Kết quả
NaN
An error caught
Error message: ReferenceError: a is not defined
Finally will execute every time
Trong chương trình trên, một lỗi xảy ra và lỗi đó được bắt bởi khối catch
. Khối finally
sẽ được thực thi trong bất kỳ tình huống nào (nếu chương trình chạy thành công hoặc nếu xảy ra lỗi).
Ghi chú : Bạn cần sử dụng câu lệnh catch
hoặc finally
sau câu lệnh try
. Nếu không, chương trình sẽ ném một lỗi Uncaught SyntaxError: Missing catch or finally after try.
JavaScript try…catch trong setTimeout
Khối try...catch
sẽ không bắt lỗi nếu nó xảy ra trong mã ” được đặt thời gian “, giống như trong setTimeout(). Ví dụ,
try {
setTimeout(function() {
// error in the code
}, 3000);
} catch (e) {
console.log( "won't work" );
}
Khối try...catch
ở trên sẽ không hoạt động vì máy đã rời khỏi cấu trúc try..catch
và hàm được thực thi sau đó.
Khối try..catch
phải nằm bên trong hàm đó để bắt lỗi trong một hàm được đặt thời gian. Ví dụ,
setTimeout(function() {
try {
// error in the code
} catch {
console.log( "error is caught" );
}
}, 3000);
Bạn cũng có thể sử dụng câu lệnh throw
với câu lệnh try...catch
để sử dụng ngoại lệ do người dùng định nghĩa. Ví dụ, một số cụ thể bị chia cho 0. Nếu bạn muốn xem xét Infinity
là một lỗi trong chương trình, bạn có thể ném một ngoại lệ do người dùng định nghĩa bằng cách sử dụng câu lệnh throw
để xử lý điều kiện đó.
- Bài đăng blog này ban đầu được xuất bản tại:https://www.programiz.com/