Оператор throw в JS
В этой статье вы познакомитесь с оператором throw в JavaScript.
В предыдущей статье вы познакомились с исключениями в JS и научились их обрабатывать с помощью оператора try...catch. Это стандартный способ обработки ошибок в программе, но существует и другой.
С помощью оператора throw можно обрабатывать исключения, созданные пользователям. Например, если в программе какое-то число делится на 0 и вы хотите, чтобы это считалось ошибкой (по умолчанию результатом будет Infinity), можно задать соответсвующее исключение, используя оператор throw.
Синтаксис
Синтаксис оператора следующий:
throw выражение;
выражение — это значение исключения, то есть описание ситуации, которая должна считать ошибочной.
Примечание.
выражениеможет быть типа string, boolean, number или объектом.
Пример
const number = 5;
// «создавай исключение, когда число делится на 0»
throw number/0;
Использование с try...catch
Синтаксис
try {
// тело try
throw выражение;
}
catch(error) {
// тело catch
}
Примечании. После выполнения оператора throw, программа покидает блок try и передается в блок catch. Поэтому код ниже оператора throw выполняться не будет.
Пример
const number = 40;
try {
if(number > 50) {
console.log('Все ок');
}
else {
// пользовательское исключение
throw new Error('Число слишком маленькое');
}
// код после throw не выполнится
console.log('привет');
}
catch(error) {
console.log('Возникла ошибка');
console.log('Сообщение об ошибке: ' + error);
}
Вывод
Возникла ошибка
Сообщение об ошибке: Число слишком маленькое
Если в этом примере некое число number меньше 51, возникакет ошибка — пользовательское исключение. Исключение создано с помощью оператора throw.
Здесь выражение — строка.
Примечание. Вы можете использовать и другие встроенные конструкторы ошибок для стандартных исключений:
TypeError,SyntaxError,ReferenceError,EvalError,InternalErrorиRangeError.
Повторный throw
Оператор throw можно повторное использовать в блоке catch. Например, если ошибку не удалось исправить и сообщать об исключении все равно придется. Повторное использование throw называется rethrow.
const number = 5;
try {
// пользовательское исключение
throw new Error('Это обычный throw');
}
catch(error) {
console.log('Возникла ошибка');
if( number + 8 > 10) {
// здесь происходит обработка ошибки
console.log('Сообщение об ошибке: ' + error);
console.log('Ошибка исправлена');
}
else {
// если не смогли обработать ошибку
// делаем rethrow
throw new Error('Число слишком маленькое');
}
}
Вывод
Возникла ошибка
Сообщение об ошибке: Error: Это обычный throw
Ошибка исправлена
Сначала мы использовали оператор throw в блоке try — как обычно. Затем мы повторно вызвали throw в блоке catch — это называется rethrow. Rethrow произойдет, если в блоке catch не удалось обработать ошибку.
При number = 5 блок catch справляется с обработкой и ошибок не возникает. Поэтому rethrow не происходит.
Если бы исключение не удалось обработать в блоке catch, появилось бы следующее: Uncaught Error: Число слишком маленькое.