Обработка исключений в JavaScript
![Обработка исключений в JavaScript](/images/articles/javascript-exception.jpg)
Иногда при написании скриптов приходится обрабатывать различные случаи, которые выходят за рамки нормального выполнения программы. Дело в том, что если не обрабатывать всевозможные исключения в JavaScript, то наш скрипт даст сбой. И о том, что такое исключения и как их обрабатывать в JavaScript, мы и поговорим.
Для обработки исключений в JavaScript (впрочем, в других языках тоже) используется конструкция try-catch (попытаться-перехватить). Суть этой конструкции следующая: try - блок, в котором мы выполняем код нормального выполнения скрипта. И если в этом блоке возникает исключительная ситуация, то она передаётся в блок catch, где уже обрабатывается.
Давайте с Вами напишем простой скрипт, которые будет генерировать исключение, если имя пользователя (допустим, полученное из формы регистрации) меньше 3-х символов.
function checkName(name) {
try {
if (name.length < 3) throw "Имя слишком короткое";
alert("Имя написано верно!");
}
catch (er) {
alert(er);
}
}
Вначале мы создаём функцию, которой передают параметр name. Дальше мы создаём блок try, в котором проверяем если имя больше или равно 3-м символам, то тогда поздравляем пользователя с тем, что он ввёл правильно своё имя. А если имя меньше 3-х символов, то мы выбрасываем (throw) исключение. В блоке catch это исключение перехватывается и выводится текст этого исключения. Советую запустить эту функцию: вначале передав нормальный параметр (строку больше или хотя бы 3 символа), а потом строку, меньше 3-х символов.
Ещё давайте рассмотрим блок finally в JavaScript. Данный блок срабатывает в любом случае, несмотря на то: вызывалось исключение или нет. Давайте с Вами дополним нашу функцию, сказав "Спасибо!" нашему пользователю.
function checkName(name) {
try {
if (name.length < 3) throw "Имя слишком короткое";
alert("Имя написано верно!");
}
catch (er) {
alert(er);
}
finally {
alert("Спасибо!");
}
}
Как видите, независимо от того было исключение или нет, всё равно блок finally срабатывает.
Лично моё мнение, что обработка исключений в JavaScript - это достаточно редкое явление просто потому, что этому нет особого применения. Ведь согласитесь, что прошлую задачу мы могли бы решить гораздо проще, безо всяких try и catch. Но в других языках программирования (например, в Java) эта конструкция используется безумно часто и без неё немыслимо серьёзное программирование в принципе. Но в будущем всё может поменяться.
-
-
Михаил Русаков
Комментарии (9):
Михаил, а можно ли использовать try-catch для достижения кроссбраузерности?
Ответить
Кроссбраузерность достигается, в основном, HTML и CSS. И немного JavaScript, однако, try-catch используется, но достаточно редко.
Ответить
Ну напр., try работает ли какая-то функция в IE, если ошибка, то catch.
Ответить
Проблем с работой функций в IE в большинстве случаев не возникает, разве что за малым исключением, но действительно try-catch используется для их обработки.
Ответить
Михаил,я только начинаю понимать javascript, function checkName(name) вот name мы выбираем по id, вот так: var name = getElementById('name');?
Ответить
Вопрос вообще не понятен.
Ответить
например есть input с айди name: <input id="name"></input>, и что бы передать данные через POST мы делаем так var name = getElementById('name').val();
Ответить
Да.
Ответить
Кстати, если нужно просто посмотреть/залогировать ошибки на клиентах - можно вообще не использовать try-catch. Достаточно заюзать один из сервисов отслеживания JS-ошибок: t.onthe.io/js/errors/, trackjs.com, jslogger.com. Я остановился на первом из-за его бесплатности и простоты. Нужно скопировить и вставить всего 1 строку кода. Сразу видишь какие JS-ошибки происходят у пользователей, насколько они частые, в каких браузерах и тд.
Ответить
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.