JavaScript Ошибки-бросать и пытаться поймать
Инструкция try позволяет тестировать блок кода на наличие ошибок.
Оператор catch позволяет обработать ошибку.
Инструкция throw позволяет создавать пользовательские ошибки.
Оператор finally позволяет выполнять код после try и catch независимо от результата.
Ошибки будут происходить!
При выполнении кода JavaScript могут возникать различные ошибки.
Ошибки могут быть кодирование ошибки, сделанные программистом, ошибки из-за неправильного ввода, и другие непредвиденные вещи.
Пример
In this example we have written alert as adddlert to deliberately produce an error:
<p id="demo"></p>
<script>
try {
adddlert("Welcome guest!");
}
catch(err) {
document.getElementById("demo").innerHTML = err.message;
}
</script>
JavaScript ловит адддлерт как ошибку и выполняет код catch для его обработки.
JavaScript попробовать и поймать
Инструкция try позволяет определить блок кода для проверки на наличие ошибок во время его выполнения.
Инструкция catch позволяет определить блок кода, который будет выполняться, если в блоке try возникает ошибка.
Операторы JavaScript try и catch поставляются парами:
try {
Block of code to try
}
catch(err) {
Block of code to handle errors
}
JavaScript бросает ошибки
При возникновении ошибки JavaScript обычно останавливается и генерирует сообщение об ошибке.
Технический термин для этого: JavaScript будет генерировать исключение (выбросить ошибку).
JavaScript фактически создаст объект Error с двумя свойствами: Name и Message.
Инструкция throw
Инструкция throw позволяет создать пользовательскую ошибку.
Технически вы можете вызвать исключение (выбросить ошибку).
Исключением может быть строка JavaScript, число, логическое значение или объект:
throw "Too big"; // throw a text
throw 500; // throw a number
Если вы используете throw вместе с try и catch, вы можете управлять потоком программы и генерировать пользовательские сообщения об ошибках.
Пример проверки ввода
В этом примере анализируется ввод. Если значение неверно, генерируется исключение (ERR).
Исключение (ERR) перехватывается оператором catch и отображается пользовательское сообщение об ошибке:
<!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>
Проверка HTML
Приведенный выше код является лишь примером.
Современные браузеры часто используют комбинацию JavaScript и встроенную проверку HTML, используя предопределенные правила проверки, определенные в атрибутах HTML:
<input id="demo" type="number" min="5" max="10" step="1"
Подробнее о проверке форм можно прочитать в следующей главе этого учебного пособия.
Окончательное заявление
Оператор finally позволяет выполнять код после try и catch независимо от результата:
try {
Блок кода, чтобы попробовать
}
catch(err) {
Блок кода для обработки ошибок
}
finally {
Блок кода, который будет выполняться независимо от результата try/catch
}
Пример
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: " +
Объект Error
JavaScript имеет встроенный объект Error, предоставляющий сведения об ошибке при возникновении ошибки.
Объект Error предоставляет два полезных свойства: Name и Message.
Свойства объекта Error
Свойство | Описание |
---|---|
name | Задает или возвращает имя ошибки |
message | Задает или возвращает сообщение об ошибке (строка) |
Значения имени ошибки
В свойстве "имя ошибки" может быть возвращено шесть различных значений:
Ошибки | Описание |
---|---|
EvalError | An error occurred in the eval () function |
RangeError | Число "вне диапазона" произошло |
ReferenceError | Произошла незаконная ссылка |
SyntaxError | Произошла синтаксическая ошибка |
TypeError | Произошла ошибка типа |
URIError | Произошла ошибка в encodeURI () |
Шесть различных значений описаны ниже.
Ошибка eval
евалеррор указывает на ошибку в функции eval ().
Новые версии JavaScript не выбрасывают никаких евалеррор. Вместо этого используйте синтаксическая ошибка.
Ошибка диапазона
RangeError создается, если используется число, которое выходит за пределы диапазона правовых значений.
Например: нельзя задать число значащих цифр числа 500.
Пример
var num = 1;
try {
num.toPrecision(500); // A number cannot have 500
significant digits
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}
Ошибка ссылки
ReferenceError создается, если используется (ссылка) переменная, которая не была объявлена:
Пример
var x;
try {
x = y + 1; // y cannot be referenced (used)
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}
Синтаксическая ошибка
При попытке вычисления кода с ошибкой синтаксиса создается Синтаксическая ошибка.
Пример
try {
eval("alert('Hello)"); //
Missing ' will produce an error
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}
Ошибка типа
Если используется значение, находящиеся вне диапазона ожидаемых типов, создается TypeError.
Пример
var num = 1;
try {
num.toUpperCase(); // You cannot convert a number
to upper case
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}
Ошибка URI
При использовании недопустимых символов в функции URI создается уриеррор :
Пример
try {
decodeURI("%%%"); // You cannot URI decode
these percent signs
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}
Нестандартные свойства объекта Error
Mozilla и Microsoft определяет некоторые нестандартные свойства объекта Error:
имя файла (Mozilla)
LineNumber (Mozilla)
колумннумбер (Mozilla)
стек (Mozilla)
Описание (Майкрософт)
номер (Майкрософт)
Не используйте эти свойства на общедоступных веб-узлах. Они не будут работать во всех браузерах.