Полный цикл в digital

Генерация ошибок throw

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

Например, рассмотрим следующую ситуацию:

class Person{
constructor(name, age){
this.name = name;
this.age = age;
}
print(){ console.log(`Name: ${this.name}  Age: ${this.age}`);}
}
const tom = new Person("Tom", -123);
// Name: Tom  Age: -123
tom.print();

Класс Person описывает человека. В конструкторе класс получает значения для свойств name (имя) и age. Исходя из здравого смысла мы понимаем, что возраст не может быть отрицательным. Тем не менее пока, исходя из логики класса, ничего не мешает при создании объекта Person передать ему для возраста отрицательное значение. С точки зрения интерпретатора JavaScript ошибки нет, однако с точки логики и здравого смысла - это ошибка. Как исправить эту ситуацию? Есть различные способы, и один из них заключается в генерации исключения.

Для генерации исключения применяется оператор throw, после которого указывается информация об ошибке:

throw информация_об_ошибке;

Информация об ошибке может представлять любой объект. Сгенерируем исключение при передаче в конструктор Person отрицательного значения для свойства age:

class Person{
constructor(name, age){
if(age < 0) throw "Возраст должен быть положительным";
this.name = name;
this.age = age;
}
print(){ console.log(`Name: ${this.name}  Age: ${this.age}`);}
}
// Uncaught Возраст должен быть положительным
const tom = new Person("Tom", -123);  
tom.print();

В итоге при вызове конструктора Person будет сгенерировано исключение и программа завершится ошибкой. А на консоли браузера мы увидим информацию об ошибке, которая указана после оператора throw:

Uncaught Возраст должен быть положительным

Как и в общем случае мы можем обработать эту ошибку с помощью блока try...catch:

class Person{
constructor(name, age){
if(age < 0) throw "Возраст должен быть положительным";
this.name = name;
this.age = age;
}
print(){ console.log(`Name: ${this.name}  Age: ${this.age}`);}
}
try{
// Uncaught Возраст должен быть положительным
const tom = new Person("Tom", -123);  
tom.print();
}
catch(error){
console.log("Произошла ошибка");
// Возраст должен быть положительным
console.log(error);  
}

Оператор throw может вызываться в различных контекстах, например, в том же блоке try:

try{
throw "Непредвиденная ошибка!";
}
catch(error){
// Непредвиденная ошибка!
console.log(error);  
}
Заполните форму уже сегодня!
Для начала сотрудничества необходимо заполнить заявку или заказать обратный звонок. В ответ получите коммерческое предложение, которое будет содержать индивидуальную стратегию с учетом требований и поставленных задач
Работаем по будням с 9:00 до 18:00. Заявки, отправленные в выходные, обрабатываем в первый рабочий день до 12:00.
Спасибо, ваш запрос принят и будет обработан!
Эйч Маркетинг