Ошибки JavaScript - Throw и Try to Catch
- Предыдущая страница Приоритет операторов JS
- Следующая страница Область видимости JS
try
Указание позволяет тестировать ошибки в блоке кода.
catch
Указание позволяет обрабатывать ошибки.
throw
Условие позволяет создавать пользовательские ошибки.
finally
Позволяет вам выполнять код, после try и catch, независимо от результата.
Ошибки всегда будут!
При выполнении кода JavaScript могут возникнуть различные ошибки.
Ошибка может быть ошибкой программиста, ошибкой из-за неправильного ввода или из-за других непредвиденных проблем.
Пример
В этом примере мы через adddlert
Написать код предупреждения, чтобы намеренно создать ошибку:
<p id="demo"></p> <script> try { adddlert("Добро пожаловать!"); } catch(err) { document.getElementById("demo").innerHTML = err.message; } </script>
JavaScript捕获 adddlert как ошибку и затем выполняет код для обработки этой ошибки.
JavaScript try и catch
try
Указание позволяет определить блок кода, чтобы при выполнении можно было обнаружить ошибки.
catch
Указание позволяет определить блок кода, который нужно выполнить, если в блоке try произойдет ошибка.
Строки JavaScript try
и catch
Пара出现的:
try { Код блока для тестирования } catch(err) { Код блока обработки ошибок }
JavaScript выкидывает ошибку
Когда происходит ошибка, JavaScript обычно останавливается и создает сообщение об ошибке.
Технический термин описывается следующим образом:JavaScript выбрасывает исключения (выбрасывает ошибки)
JavaScript фактически создает исключения с двумя свойствами: Объект ошибки:name
и message
Условие throw
throw
Условие позволяет создавать пользовательские ошибки.
Технически вы можетеВыброс исключения (выброс ошибки)
Исключения могут быть строками, числами, логическими значениями или объектами в JavaScript:
throw "Too big"; // выбросить текст throw 500; // выбросить число
Если throw
с try
и catch
Вместе они позволяют контролировать поток программы и создавать пользовательские сообщения об ошибках.
Пример валидации ввода
Этот пример проверяет ввод. Если значение ошибочно, будет выброшено исключение (err).
Этот исключение (err) будет захвачено оператором catch и отобразить пользовательское сообщение об ошибке:
<!DOCTYPE html> <html> <body> <p>Введите число от 5 до 10:</p> <input id="demo" type="text"> <button type="button" onclick="myFunction()">Тестировать ввод</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 "пустой"; if(isNaN(x)) throw "не число"; x = Number(x); if(x < 5) throw "слишком маленький"; if(x > 10) throw "слишком большой"; } catch(err) { message.innerHTML = "Ввод: " + err; } } </script> </body> </html>
HTML-валидация
Этот код всего лишь пример.
Современные браузеры обычно комбинируют JavaScript с内置 HTML-валидацией, используя предопределенные правила ватификации, определенные в HTML-атрибутах:
<input id="demo" type="number" min="5" max="10" step="1">
Больше о проверке форм вы узнаете в более поздних главах этого руководства.
Условие finally
finally
Инструкция позволяет выполнять код после try и catch, независимо от результата:
try { // Блок кода для тестирования } catch(err) { // Блок кода для обработки ошибок } finally { // Всякий случай выполняющийся блок кода }
Пример
function myFunction() { var message, x; message = document.getElementById("message"); message.innerHTML = ""; x = document.getElementById("demo").value; try { if(x == "") throw "пусто"; if(isNaN(x)) throw "не число"; x = Number(x); if(x > 10) throw "слишком велик"; if(x < 5) throw "слишком мал"; } catch(err) { message.innerHTML = "ошибка: " + err + "."; } finally { document.getElementById("demo").value = ""; } }
Объект ошибки
JavaScript имеет встроенный объект error, который предоставляет информацию об ошибках.
объект ошибки предоставляет два полезных свойства:name
и message
свойства объекта ошибки
свойство | описание |
---|---|
name | устанавливает или возвращает имя ошибки |
message | устанавливает или возвращает сообщение об ошибке (строку) |
Значения имен ошибок
свойство name ошибки может возвращать шесть различных значений:
имя ошибки | описание |
---|---|
EvalError | ошибка, которая произошла в функции eval() |
RangeError | произошла ошибка за пределами диапазона чисел |
ReferenceError | произошла незаконная ссылка |
SyntaxError | произошла грамматическая ошибка |
TypeError | произошла ошибка типа |
URIError | ошибка, которая произошла в encodeURI() |
ниже мы подробно рассмотрим эти шесть различных значений.
ошибка eval
EvalError
указания на ошибки в функции eval().
новые версии JavaScript не будут выбрасывать какие-либо EvalError
Пожалуйста, используйте SyntaxError
замена.
ошибка диапазона
RangeError
будет выброшено, если вы используете число за пределами допустимого диапазона значений.
например: вы не можете установить количество значащих цифр числа как 500.
Пример
var num = 1; try { num.toPrecision(500); // Число не может иметь 500 значащих цифр } catch(err) { document.getElementById("demo").innerHTML = err.name; }
ошибка ссылки
Если вы используете (ссылка) переменную, которая еще не была объявлена, то ReferenceError
будет выброшено:
Пример
var x; try { x = y + 1; // y не может быть использована (ссылка) } catch(err) { document.getElementById("demo").innerHTML = err.name; }
грамматическая ошибка
Если вы выполняете код с грамматической ошибкой, то SyntaxError
Выброшено:
Пример
try { eval("alert('Hello')"); // Пропуск ' вызовет ошибку } catch(err) { document.getElementById("demo").innerHTML = err.name; }
ошибка типа
Если значение, которое вы используете, не находится в ожидаемом диапазоне значений, то TypeError
Выброшено:
Пример
var num = 1; try { num.toUpperCase(); // Вы не можете преобразовать цифру в верхний регистр } catch(err) { document.getElementById("demo").innerHTML = err.name; }
Ошибка URI
Если вы используете非法 символы в функции URI, то URIError
Выброшено:
Пример
try { decodeURI("%%%"); // Вы не можете кодировать эти проценты в URI } catch(err) { document.getElementById("demo").innerHTML = err.name; }
Нестандартные свойства объекта Error
Mozilla и Microsoft определили нестандартные свойства объекта error:
- fileName (Mozilla)
- lineNumber (Mozilla)
- columnNumber (Mozilla)
- stack (Mozilla)
- description (Microsoft)
- number (Microsoft)
Не используйте эти свойства на общедоступных веб-сайтах. Они не работают во всех браузерах.
- Предыдущая страница Приоритет операторов JS
- Следующая страница Область видимости JS