Câu lệnh try
cho phép bạn kiểm tra lỗi cho một khối code.
Câu lệnh catch
cho phép bạn xử lý lỗi.
Câu lệnh throw
cho phép bạn tạo các lỗi tùy chỉnh.
Câu lệnh finally
cho phép bạn thực thi code, sau try catch, bất kể kết quả.
Khi thực thi JavaScript code, các lỗi khác nhau có thể xảy ra.
Các lỗi có thể là các lỗi được code làm bởi các lập trình viên, các lỗi xảy ra do nhập sai, và các thứ không thể thấy khác.
Trong ví dụ này chúng ta đã viết một cảnh báo bằng adddlert để cố tình tạo ra một lỗi:
<p id="demo"></p>
<script>
try {
adddlert("Welcome guest!");
}
catch(err) {
document.getElementById("demo").innerHTML = err.message;
}
</script>
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Error Handling</h2>
<p>This example demonstrates how to use <b>catch</b> to diplay an error.</p>
<p id="demo"></p>
<script>
try {
adddlert("Welcome guest!");
}
catch(err) {
document.getElementById("demo").innerHTML = err.message;
}
</script>
</body>
</html>
Tip: JavaScript bắt adddlert như một lỗi, và thực thi lệnh catch để xử lý nó.
Câu lệnh try try
cho phép bạn xác định một khối code sẽ được thử nghiệm lỗi khi nó đang thực thi.
Câu lệnh catch
cho phép bạn xác định một khối code sẽ được thực thi, nếu một lỗi xảy ra trong khối try.
Các câu lệnh JavaScript try
và catch
đi theo cặp:
try {
Block of code to try
}
catch(err) {
Block of code to handle errors
}
Khi một lỗi xảy ra, JavaScript sẽ dừng một cách bình thường và sinh một thông điệp lỗi.
Thuật ngữ kĩ thuật cho việc này là: JavaScript sẽ throw an exception(ném một ngoại lệ) (throw an error - ném một lỗi).
Tip: JavaScript sẽ thực sự tạo một đối tượng Error với hai thuộc tính: gồm tên(name) và thông điệp(message).
Cú pháp throw
cho phép bạn tạo một lỗi tùy chọn.
Về mặt kĩ thuật bạn có thể throw một exception (ném một lỗi).
Exception có thể là một JavaScript String
, một Number
, một Boolean
hay một Object
:
throw "Too big"; // throw a text
throw 500; // throw a number
Nếu bạn dùng throw
cùng với try
và catch
, bạn có thể điều khiển luồng chương trình và sinh ra một thông điệp lỗi tùy chọn.
Đây là một ví dụ kiểm tra nhập vào. Nếu giá trị sai, một exception (err) được ném.
Exception (err) được bắt bởi câu lệnh catch và một thông điệp lỗi tùy chọn đượ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() {
var message, x;
message = document.getElementById("p01");
message.innerHTML = "";
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>
Dòng code bên trên chỉ là một ví dụ.
Các trình duyệt hiện đại thường dùng một kết hợp của JavaScript và validation xây trong HTML, sử dụng các quy tắc xác thực được xác định trước trong các thuộc tính HTML:
<input id="demo" type="number" min="5" max="10" step="1">
Bạn có thể đọc nhiều hơn về validation trong chương sau.
Câu lệnh finally
cho phép bạn thực thi code, sau try và catch, bất kể kết quả:
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
}
function myFunction() {
var message, x;
message = document.getElementById("p01");
message.innerHTML = "";
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 = "";
}
}
<!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() {
var message, x;
message = document.getElementById("p01");
message.innerHTML = "";
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 = "Input " + err;
}
finally {
document.getElementById("demo").value = "";
}
}
</script>
</body>
</html>
JavaScript có một đối tượng error xây dựng bên trong cung cấp thông tin lỗi khi một lỗi xảy ra.
Đối tượng error cung cấp hai thuộc tính hữu dụng: tên(name) và thông điệp(message).
Thuộc tính | Mô tả |
---|---|
name | Đặt hoặc trả về một tên lỗi |
message | Đặt hoặc trả một thông điệp lỗi (một chuỗi) |
Sáu giá trị khác nhau có thể trả về bởi thuộc tính tên lỗi:
Tên lỗi | Mô tả |
---|---|
EvalError | Một lỗi đã xảy ra trong hàm eval() |
RangeError | Một số "ngoài phạm vi" đã xảy ra |
ReferenceError | Một tham chiếu không hợp lệ đã xảy |
SyntaxError | Một lỗi cú pháp đã xảy ra |
TypeError | Một lỗi về kiểu đã xảy ra |
URIError | Một lỗi trong encodeURI() đã xảy ra |
Sáu giá trị khác nhau được thể hiện bên dưới.
Một EvalError
chỉ ra một lỗi trong hàm eval().
Phiên bản mới hơn của JavaScript không throw EvalError. Dùng SyntaxError thay thế.
Một RangeError
được throw nếu bạn dùng một số nằm ngoài phạm vi của giá trị hợp lệ.
Ví dụ: Bạn không thể đặt số chữ số có nghĩa của một số thành 500.
var num = 1;
try {
num.toPrecision(500); // A number cannot have 500 significant digits
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}
<html>
<body>
<h2>JavaScript Errors</h2>
<p>You cannot set the number of significant digits of a number to 500:</p>
<p id="demo">
<script>
var num = 1;
try {
num.toPrecision(500);
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}
</script>
</body>
</html>
Một ReferenceError
được thrown nếu bạn dùng (tham chiếu) một biến chưa được khai báo:
var x;
try {
x = y + 1; // y cannot be referenced (used)
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Errors</h2>
<p>You cannot use the value of a non-existing variable:</p>
<p id="demo"></p>
<script>
var x;
try {
x = y + 1;
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}
</script>
</body>
</html>
Một SyntaxError
được thrown nếu bạn cố gắng dự tính code với một lỗi cú pháp.
try {
eval("alert('Hello)"); // Missing ' will produce an error
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Errors</h2>
<p>You cannot evaluate code that contains a syntax error:</p>
<p id="demo"></p>
<script>
try {
eval("alert('Hello)");
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}
</script>
</body>
</html>
Một TypeError
được throw nếu bạn dùng một giá trị ngoài phạm vi của kiểu dự kiến:
var num = 1;
try {
num.toUpperCase(); // You cannot convert a number to upper case
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Errors</h2>
<p>You cannot convert a number to upper case:</p>
<p id="demo"></p>
<script>
var num = 1;
try {
num.toUpperCase();
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}
</script>
</body>
</html>
Một URIError
được thrown nếu bạn dùng một kí tự không hợp lệ trong một hàm URI:
try {
decodeURI("%%%"); // You cannot URI decode percent signs
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Errors</h2>
<p>Some characters cannot be decoded with decodeURI():</p>
<p id="demo"></p>
<script>
try {
decodeURI("%%%");
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}
</script>
</body>
</html>
Mozilla và Microsoft định danh một số các thuộc tính đối tượng lỗi không tiêu chuẩn
fileName (Mozilla)
lineNumber (Mozilla)
columnNumber (Mozilla)
stack (Mozilla)
description (Microsoft)
number (Microsoft)
Đừng dùng chúng 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.
Ứng Dụng Học
Theo dõi cập nhật nội dung học trên Youtube & Facebook
Thông Tin Liên Hệ
Công Ty Cổ Phần Phát Triển Công Nghệ Gozic.
Website: https://gozic.vn
SĐT: 096 - 70 25 996
Email: ziczacgroup@gmail.com
Thiết kế webiste chuyên nghiệp
Thiết kế phần mềm quản trị
Thiết kế ứng dụng Android
Thiết kế ứng dụng IOS
Thiết kế Web App
Hỗ trợ Digital Marketing
Hỗ trợ quảng cáo Google Ads
Hỗ trợ quảng cáo Facebook Ads
Hỗ trợ SEO Website