Ngoại lệ trong Javascript
Bạn không thể dự đoán và kiểm tra mọi điều kiện có thể trong mã để tránh sai sót, thậm chí nếu bạn có thể làm được thì bạn cũng không thể đảm bảo ngoại lệ ra đúng. Nó quan trọng để xử lý tất cả các lỗi một cách chính xác và hiển thị thông báo lỗi thích hợp hơn và liên quan đến client.
Tương tự như ngôn ngữ lập trình khác, ngoại lệ trong JavaScript được xử lý bằng lệnh try, catch
<html>
<head>
<title></title>
<script type="text/javascript">
var TryCatch = function () {
try {
var error = new Error("aaaaaa!");
error.name = "SampleError";
throw error;
} catch (e) {
document.writeln(e.name + ': ' + e.message);
}
}
TryCatch();
</script>
</head>
<body>
</body>
</html>
Bạn không thể viết nhiều khối catch trong javascript. Câu hỏi đặt ra là làm thế nào chúng ta phân biệt giữa các loại lỗi khác nhau. Có hai cách để làm điều này bằng cách kiểm tra instance của toán hạng (để có thêm thông tin về toán hạng instance xem https://developer.mozilla.org/en/JavaScript/Reference/Operators/instanceof) trên biến lỗi (ở đây e là biến lỗi trong mã trên).
<script type="text/javascript">
var TryCatch = function () {
try {
throw new TypeError;
//throw new URIError;
} catch (e) {
if (e instanceof TypeError)
document.writeln('type error');
else if (e instanceof URIError)
document.writeln('uri error');
}
}
TryCatch();
</script>
Trong toán hạng instance trên kiểm tra xem đối tượng có chứa lỗi kiểu đối tượng lỗi.
Tuy nhiên, chúng ta có thể kiểm tra tên thuộc tính của đối tượng lỗi như dưới đây:
<script type="text/javascript">
var TryCatch = function () {
try {
//throw new TypeError;
throw new URIError;
} catch (e) {
if (e.name == 'TypeError')
document.writeln('type error');
else if (e.name == 'URIError')
document.writeln('uri error');
}
}
TryCatch();
</script>
Bằng cách này bạn có thể xử lý nhiều điều kiện lỗi trong try... catch. Nhưng câu hỏi đặt ra có bao nhiêu loại lỗi. Thực tế, có 6 loại lỗi trong javascript.
- EvalError
- RangeError
- ReferenceError
- SyntaxError
- TypeError
- URIError