JavaScript: JavaScript Throw Exception
Giới thiệu về lệnh throw
trong JavaScript
Lệnh throw
trong JavaScript cho phép bạn ném ra một ngoại lệ. Dưới đây là cú pháp của lệnh throw
:
throw expression;
Trong cú pháp này, expression
chỉ định giá trị của ngoại lệ. Thông thường, bạn sẽ sử dụng một đối tượng mới của lớp Error
hoặc các lớp con của nó.
Khi gặp lệnh throw
, trình duyệt JavaScript sẽ ngừng thực thi và chuyển quyền kiểm soát đến khối catch
đầu tiên trong ngăn xếp cuộc gọi. Nếu không có khối catch
nào tồn tại, JavaScript sẽ kết thúc việc thực thi tập lệnh.
Ví dụ về việc ném ngoại lệ trong JavaScript
Hãy xem một số ví dụ về cách sử dụng lệnh throw
trong JavaScript.
1) Sử dụng lệnh throw
để ném ngoại lệ
Ví dụ sau sử dụng lệnh throw
để ném ra một ngoại lệ trong một hàm:
function add(x, y) { if (typeof x !== 'number') { throw 'The first argument must be a number'; } if (typeof y !== 'number') { throw 'The second argument must be a number'; } return x + y; } const result = add('a', 10); console.log(result);
Cách hoạt động:
- Đầu tiên, hàm
add()
được định nghĩa để nhận hai đối số và trả về tổng của chúng. Hàmadd()
sử dụng toán tửtypeof
để kiểm tra loại của mỗi đối số và ném ra ngoại lệ nếu loại không phải là số. - Tiếp theo, gọi hàm
add()
và truyền vào một chuỗi và một số. - Cuối cùng, kết quả được hiển thị trên console.
Tập lệnh sẽ gây ra lỗi vì đối số đầu tiên ("a") không phải là số:
Uncaught The first argument must be a number
Để xử lý ngoại lệ, bạn có thể sử dụng câu lệnh try...catch
. Ví dụ:
function add(x, y) { if (typeof x !== 'number') { throw 'The first argument must be a number'; } if (typeof y !== 'number') { throw 'The second argument must be a number'; } return x + y; } try { const result = add('a', 10); console.log(result); } catch (e) { console.log(e); }
Output
The first argument must be a number
Trong ví dụ này, chúng ta đặt lệnh gọi hàm add()
trong một khối try
. Vì biểu thức trong lệnh throw
là một chuỗi, nên ngoại lệ trong khối catch
cũng là một chuỗi như đã hiển thị trong kết quả.
2) Sử dụng lệnh throw
để ném ra một đối tượng của lớp Error
Trong ví dụ sau, chúng ta ném ra một đối tượng của lớp Error
thay vì một chuỗi trong hàm add()
:
function add(x, y) { if (typeof x !== 'number') { throw new Error('The first argument must be a number'); } if (typeof y !== 'number') { throw new Error('The second argument must be a number'); } return x + y; } try { const result = add('a', 10); console.log(result); } catch (e) { console.log(e.name, ':', e.message); }
Output
Error : The first argument must be a number
Như được hiển thị trong kết quả, đối tượng ngoại lệ trong khối catch
có tên là Error
và thông báo là thông báo mà chúng ta đã truyền vào hàm tạo Error()
.
3) Sử dụng lệnh throw
để ném ra một ngoại lệ do người dùng định nghĩa
Đôi khi, bạn muốn ném ra một lỗi tùy chỉnh thay vì lỗi có sẵn. Để làm điều đó, bạn có thể định nghĩa một lớp lỗi tùy chỉnh kế thừa từ lớp Error
và ném ra một đối tượng mới của lớp đó. Ví dụ:
Trước tiên, định nghĩa lớp NumberError
kế thừa từ lớp Error
:
class NumberError extends Error { constructor(value) { super(`"${value}" is not a valid number`); this.name = 'InvalidNumber'; } }
Hàm tạo (constructor
) của lớp NumberError
nhận một giá trị mà bạn sẽ truyền vào khi tạo một đối tượng mới của lớp.
Trong hàm tạo của lớp NumberError
, chúng ta gọi hàm tạo của lớp Error
thông qua super
và truyền vào một chuỗi. Ngoài ra, chúng ta ghi đè tên của lỗi thành chuỗi "NumberError"
. Nếu không làm điều này, tên của NumberError
sẽ là "Error"
.
Thứ hai, sử dụng lớp NumberError
trong hàm add()
:
function add(x, y) { if (typeof x !== 'number') { throw new NumberError(x); } if (typeof y !== 'number') { throw new NumberError(y); } return x + y; }
Trong hàm add()
, chúng ta ném ra một đối tượng của lớp NumberError
nếu đối số không phải là số hợp lệ.
Thứ ba, bắt ngoại lệ do hàm add()
ném ra:
try { const result = add('a', 10); console.log(result); } catch (e) { console.log(e.name, ':', e.message); }
Output
InvalidNumber : "a" is not a valid number
Trong ví dụ này, tên ngoại lệ là "NumberError"
và thông báo là thông báo mà chúng ta đã truyền vào super()
trong hàm tạo của lớp NumberError
.
Tóm tắt
Sử dụng lệnh throw
trong JavaScript để ném ra một ngoại lệ do người dùng định nghĩa.