Lỗi JavaScript
Ném, và thử ... Bắt ... Cuối cùng
Câu try
lệnh xác định một khối mã để chạy (để thử).
Câu catch
lệnh xác định một khối mã để xử lý bất kỳ lỗi nào.
Câu finally
lệnh xác định một khối mã để chạy bất kể kết quả.
Câu throw
lệnh xác định một lỗi tùy chỉnh.
Lỗi Sẽ Xảy Ra!
Khi thực thi mã JavaScript, các lỗi khác nhau có thể xảy ra.
Lỗi có thể là lỗi mã hóa do lập trình viên thực hiện, lỗi do nhập sai, và những điều không thể lường trước khác.
Thí dụ
Trong ví dụ này, chúng tôi đã viết sai chính tả "alert" thành "adddlert" để cố tình tạo ra lỗi:
<p id="demo"></p>
<script>
try {
adddlert("Welcome guest!");
}
catch(err) {
document.getElementById("demo").innerHTML = err.message;
}
</script>
JavaScript bắt lỗi adddlert và thực thi mã bắt để xử lý nó.
Hãy thử và nắm bắt JavaScript
Câu try
lệnh cho phép bạn xác định một khối mã để kiểm tra lỗi trong khi nó đang được thực thi.
Câu catch
lệnh cho phép bạn xác định một khối mã sẽ được thực thi, nếu có lỗi xảy ra trong khối try.
Các câu lệnh JavaScript try
và catch
đi theo từng cặp:
try {
Block of code to try
}
catch(err) {
Block of code to handle errors
}
JavaScript Ném lỗi
Khi xảy ra lỗi, JavaScript thông thường sẽ dừng lại và tạo ra thông báo lỗi.
Thuật ngữ kỹ thuật cho điều này là: JavaScript sẽ ném một ngoại lệ (ném một lỗi) .
JavaScript thực sự sẽ tạo một đối tượng Lỗi với hai thuộc tính: tên và thông báo .
Tuyên bố ném
Câu throw
lệnh cho phép bạn tạo một lỗi tùy chỉnh.
Về mặt kỹ thuật, bạn có thể ném một ngoại lệ (ném một lỗi) .
Ngoại lệ có thể là JavaScript String
, a Number
, a Boolean
hoặc an Object
:
throw "Too big"; // throw a text
throw 500; // throw a number
Nếu bạn sử dụng throw
cùng với try
và
catch
, bạn có thể kiểm soát luồng chương trình và tạo thông báo lỗi tùy chỉnh.
Ví dụ về xác thực đầu vào
Ví dụ này kiểm tra đầu vào. Nếu giá trị sai, một ngoại lệ (lỗi) được ném ra.
Ngoại lệ (err) bị bắt bởi câu lệnh catch và một thông báo lỗi tùy chỉnh được hiển thị:
<!DOCTYPE html>
<html>
<body>
<p>Please input a number between
5 and 10:</p>
<input id="demo" type="text">
<button type="button"
onclick="myFunction()">Test Input</button>
<p id="p01"></p>
<script>
function myFunction() {
const message =
document.getElementById("p01");
message.innerHTML = "";
let x =
document.getElementById("demo").value;
try {
if(x == "") throw "empty";
if(isNaN(x)) throw "not a number";
x = Number(x);
if(x < 5) throw
"too low";
if(x > 10) throw "too
high";
}
catch(err) {
message.innerHTML =
"Input is " + err;
}
}
</script>
</body>
</html>
Xác thực HTML
Đoạn mã trên chỉ là một ví dụ.
Các trình duyệt hiện đại thường sẽ sử dụng kết hợp JavaScript và xác thực HTML tích hợp sẵn, sử dụng các quy tắc xác thực được xác định trước được xác định trong các thuộc tính HTML:
<input id="demo" type="number" min="5" max="10" step="1">
Bạn có thể đọc thêm về xác thực biểu mẫu trong chương sau của hướng dẫn này.
Tuyên bố cuối cùng
Câu finally
lệnh cho phép bạn thực thi mã sau khi thử và bắt, bất kể kết quả như thế nào:
Cú pháp
try {
Block of code to try
}
catch(err) {
Block of code to handle errors
}
finally {
Block of code to be executed regardless of the try / catch result
}
Thí dụ
function myFunction() {
const message =
document.getElementById("p01");
message.innerHTML = "";
let x =
document.getElementById("demo").value;
try {
if(x == "") throw "is empty";
if(isNaN(x))
throw "is not a number";
x = Number(x);
if(x >
10) throw "is too high";
if(x <
5) throw "is too low";
}
catch(err)
{
message.innerHTML = "Error: " +
err + ".";
}
finally {
document.getElementById("demo").value = "";
}
}
Đối tượng lỗi
JavaScript có một đối tượng lỗi được tích hợp sẵn để cung cấp thông tin lỗi khi xảy ra lỗi.
Đối tượng lỗi cung cấp hai thuộc tính hữu ích: tên và thông báo.
Thuộc tính đối tượng lỗi
Bất động sản | Sự miêu tả |
---|---|
Tên | Đặt hoặc trả về tên lỗi |
nhắn | Đặt hoặc trả về một thông báo lỗi (một chuỗi) |
Giá trị tên lỗi
Sáu giá trị khác nhau có thể được trả về bằng thuộc tính tên lỗi:
Tên lỗi | Sự miêu tả |
---|---|
EvalError | Đã xảy ra lỗi trong hàm eval () |
RangeError | Một số "nằm ngoài phạm vi" đã xảy ra |
ReferenceError | Đã xảy ra tham chiếu bất hợp pháp |
Lỗi cú pháp | Đã xảy ra lỗi cú pháp |
TypeError | Đã xảy ra lỗi loại |
URIError | Đã xảy ra lỗi trong encodeURI () |
Sáu giá trị khác nhau được mô tả bên dưới.
Đánh giá lỗi
An EvalError
chỉ ra một lỗi trong hàm eval ().
Các phiên bản JavaScript mới hơn không ném ra EvalError. Sử dụng SyntaxError để thay thế.
Lỗi phạm vi
A RangeError
sẽ bị ném nếu bạn sử dụng một số nằm ngoài phạm vi giá trị pháp lý.
Ví dụ: Bạn không thể đặt số chữ số có nghĩa của một số thành 500.
Thí dụ
let num = 1;
try {
num.toPrecision(500); // A number cannot have 500
significant digits
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}
Lỗi tham chiếu
A ReferenceError
được ném nếu bạn sử dụng (tham chiếu) một biến chưa được khai báo:
Thí dụ
let x = 5;
try {
x = y + 1; // y cannot be used (referenced)
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}
Lỗi cú pháp
A SyntaxError
được đưa ra nếu bạn cố gắng đánh giá mã có lỗi cú pháp.
Thí dụ
try {
eval("alert('Hello)"); //
Missing ' will produce an error
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}
Loại lỗi
A TypeError
được ném ra nếu bạn sử dụng một giá trị nằm ngoài phạm vi của các loại mong đợi:
Thí dụ
let num = 1;
try {
num.toUpperCase(); // You cannot convert a number
to upper case
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}
Lỗi URI (Định danh tài nguyên đồng nhất)
A URIError
bị ném nếu bạn sử dụng các ký tự không hợp lệ trong một hàm URI:
Thí dụ
try {
decodeURI("%%%"); // You cannot URI decode
percent signs
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}
Thuộc tính đối tượng lỗi không chuẩn
Mozilla và Microsoft xác định một số thuộc tính đối tượng lỗi không chuẩn:
fileName (Mozilla)
lineNumber (Mozilla)
columnNumber (Mozilla)
stack
description (Mozilla) number (Microsoft)
number (Microsoft)
Không sử dụng các thuộc tính này trong các trang web công cộng. Chúng sẽ không hoạt động trong tất cả các trình duyệt.
Hoàn thành tham chiếu lỗi
Để có tài liệu tham khảo đầy đủ về đối tượng Lỗi, hãy chuyển đến Tài liệu tham khảo lỗi JavaScript hoàn chỉnh của chúng tôi .