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

codechick

СodeСhick.io - простой и эффективный способ изучения программирования.

2024 ©