JavaScript: JavaScript Throw Exception


Khóa học qua video:
Lập trình Python All Lập trình C# All SQL Server All Lập trình C All Java PHP HTML5-CSS3-JavaScript
Đăng ký Hội viên
Tất cả các video dành cho hội viên

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:

  1. Đầ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àm add() 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ố.
  2. Tiếp theo, gọi hàm add() và truyền vào một chuỗi và một số.
  3. 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.

» Tiếp: Giới thiệu về sự kiện
« Trước: JavaScript Promise.race()
Khóa học qua video:
Lập trình Python All Lập trình C# All SQL Server All Lập trình C All Java PHP HTML5-CSS3-JavaScript
Đăng ký Hội viên
Tất cả các video dành cho hội viên
Copied !!!