Оператор 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: Число слишком маленькое
.