Выбрасывание исключений в JavaScript

В предыдущих уроках мы изучили два места, в которых JavaScript выбрасывает исключение в случае каких-то проблем.

В вашем проекте, однако, могут быть и другие ситуации, которые для вас являются исключительными, а для JavaScript - нет. В таком случае мы можете создавать и выбрасывать свои, пользовательские исключения.

Давайте разберем синтаксис, необходимый для этого. Для начала исключение нужно создать с помощью команды new Error, параметром передав текст исключения:

javascriptnew Error('текст исключения');

Затем это исключение нужно выбросить с помощью команды throw:

javascriptthrow new Error('текст исключения');

Выбрасывание исключения заставляет JavaScript считать, что случилась исключительная ситуация. Это значит, что такое исключение можно отловить с помощью конструкции try-catch и обработать нужным образом.

Давайте посмотрим на примере, как этим пользоваться. Пусть у нас есть функция, которая делит одно число на другое:

javascriptfunction div(a, b) {
  return a / b;
}

Давайте будем считать, что деление на ноль запрещено и при попытке сделать это должна возникать исключительная ситуация. Для этого будем проверять в функции, нет ли попытки делить на 0. Если нет - будем делить, а если да - будем бросать исключение:

javascriptfunction div(a, b) {
  if (b !== 0) {
    return a / b;
  } else {
    throw new Error('ошибка деления на ноль');
  }
}

Давайте для начала просто попробуем поделить на 0, не перехватывая исключение:

javascriptalert( div(3, 0) );

В этом случае выполнение скрипта прервется и в консоли появится ошибка с текстом 'ошибка деления на ноль' (проверьте). Давайте теперь будем перехватывать нашу ошибку и как-то ее обрабатывать:

javascripttry {
  alert( div(3, 0) );
} catch (error) {
  alert('вы пытаетесь делить на 0, что запрещено');
}
Задание 1

В JavaScript попытка извлечь корень из отрицательного числа не приводит к выбрасыванию исключения:

javascriptlet result = Math.sqrt(-1);
console.log(result); // выведет NaN

Напишите свою функцию, которая будет извлекать корень из числа и при этом выбрасывать исключение, если корень извлекается из отрицательного числа.