Чтобы запустить ваш catch, блок try должен завершиться сбоем - как в случае с отсутствующей переменной.
const messageA = document.querySelector('#message-a');
const messageB = document.querySelector('#message-b');
const a = 10;
const b = 10;
// const c = 10;
// Test 1 (works)
try {
let sum = a + b;
messageA.innerHTML = "We're Happy!"
} catch (err) {
messageA.innerHTML = "Houston we have a problem!";
}
// Test 2 (fails because c is not defined)
try {
let sum = a + c;
messageB.innerHTML = "We're Happy!"
} catch (err) {
messageB.innerHTML = "Houston we have a problem!";
}
<p>Test 1: <span id="message-a"></span></p>
<p>Test 2: <span id="message-b"></span></p>
Разница между if / else и try / catch
Если / else является условным оператором , который оценивает условие например. х == 42
и затем запустите блок true или false в зависимости от результата.
if (condition) {
/* condition is true do... */
}
else {
/* condition is false do... */
}
Try / catch - это оператор исключения , который всегда будет запускать блок try и только
передать управление блоку перехвата, если что-то вызывает ошибку
(как правило, фатальная ошибка, которая в противном случае сломает программу).
try {
/* do this... and if it fails transfer control to catch */
}
catch(err) {
/* something caused an error now do this... */
}
Думайте об этом как о методе обработки ошибок - например, если вы делаете запрос к API и
по какой-то причине сервер не отвечает, вы не авторизованы или ...
Подробнее: Поток управления и обработка ошибок в MDN