Javascript - Lệnh xử lý lỗi

Các lệnh xử lý lỗi trong JavaScript

JavaScript cung cấp cho ta bốn loại lệnh dùng để kiểm soát và xử lý lỗi: try, catch, throw, finally

1) Lệnh "try" và "catch" trong JavaScript


- Như chúng ta đã biết:

Khi thực thi một đoạn mã JavaScript, nếu một câu lệnh nào đó bị lỗi thì việc thực thi sẽ kết thúc
(tất cả những câu lệnh nằm phía sau câu lệnh bị lỗi sẽ không được thực thi)

Từ đây, lệnh try giúp chúng ta tránh tình trạng này.

- Lệnh try được dùng để kiểm tra (thực thi) một đoạn mã, nếu đoạn mã đó có chứa câu lệnh bị lỗi thì những câu lệnh nằm phía sau câu lệnh bị lỗi sẽ không được thực thi. Tuy nhiên, những câu lệnh nằm ngoài lệnh try thì vẫn thực thi bình thường.

- Lệnh try cần phải sử dụng kèm với lệnh catch hoặc lệnh finally

(Nhưng thông thường thì lệnh try được sử dụng chung với lệnh catch nhiều hơn)

- Lệnh catch dùng để xác định một đoạn mã và đoạn mã đó sẽ được thực thi nếu đoạn mã bên trong lệnh try có chứa câu lệnh bị lỗi (Điều đó đồng nghĩa với việc: nếu đoạn mã bên trong lệnh try không chứa câu lệnh bị lỗi thì đoạn mã bên trong lệnh catch sẽ không được thực thi).

Cú pháp: 

try {
Khối code để try
}
catch(err) {
Khối mã để xử lý lỗi
 }

 Ví dụ:

<html>
<body><p id=”demo”></p><script>
try {
adddlert(“Welcome guest!”);
}
catch(err) {
document.getElementById(“demo”).innerHTML = err.message;
}
</script>

</body>
</html>

hiepsiithtml1

 Lưu ý: Lệnh catch phải có một tham số (điển hình ví dụ trên là tham số err), tham số này dùng để lưu trữ một đối tượng, đối tượng này chứa các thông tin về lỗi của câu lệnh bị lỗi trong lệnh try.

2. Lệnh "throw" trong JavaScript


- Lệnh throw thường được đặt bên trong lệnh try

- Lệnh throw có chức năng ném ra một lỗi (hoặc cũng có thể nói là tạo ra một lỗi)

- Lưu ý: Sau khi lệnh throw "được thực thi" thì một lỗi sẽ được tạo ra, điều đó cũng đồng nghĩa với việc câu lệnh bị lỗi. Do đó, những câu lệnh còn lại nằm phía sau lệnh throw sẽ không được thực thi.

Ví dụ:

Ví dụ này kiểm tra đầu vào. Nếu giá trị là sai, một ngoại lệ (err) được ném ra. Ngoại lệ (err) được tóm bởi lệnh catch và một thông báo lỗi tùy chỉnh được hiển thị:

<html>
<body><p>Hãy nhập một số trong khoảng từ 5 đến 10:</p><input id="demo" type="text">
<button type="button" onclick="myFunction()">Kiểm tra giá trị nhập vào</button>
<p id=”message”></p>

<script>
function myFunction() {
var message, x;
message = document.getElementById("message");
message.innerHTML = "";
x = document.getElementById("demo").value;
try {
if(x == "") throw "rỗng";
if(isNaN(x)) throw "không phải là số";
x = Number(x);
if(x < 5) throw "quá nhỏ";
if(x > 10) throw "quá lớn";
}
catch(err) {
message.innerHTML = "Input is " + err;
}
}
</script>

</body>
</html>

hiepsiitthml2

3. Lệnh "finally" trong JavaScript

- Lệnh finally thường được đặt phía sau lệnh try hoặc try ... catch

- Lệnh finally dùng để thực thi một đoạn mã mặc định
(mặc cho đoạn mã bên trong lệnh try có chứa câu lệnh bị lỗi hay không)

<script>
    function KiemTraDuLieu() {
        document.getElementById("demo").innerHTML = "";
        var number = document.getElementById("number").value;
        try{ 
            if(number == ""){
                throw "Bạn chưa nhập giá trị";
            }else if(isNaN(number)){
                throw "Giá trị bạn nhập không phải là một số";
            }else if(number < 1){
                throw "Giá trị vừa nhập nhỏ hơn giá trị cho phép";
            }else if(number > 10){
                throw "Giá trị vừa nhập lớn hơn giá trị cho phép";
            }
            document.getElementById("demo").innerHTML = "Hợp lệ";
        }
        catch(err){
            document.getElementById("demo").innerHTML = err;
        }
        finally{
            document.getElementById("number").value = "";
        }
    }
</script>