JS Core

Обработка ошибок: try/catch

Научиться перехватывать ошибки с помощью try/catch/finally, понимая, когда это нужно и как работает механизм исключений.

Начальный (Beginner)
Нужно знать:Методы строк

Кратко

try/catch позволяет перехватывать ошибки, не останавливая всю программу. Код в try выполняется. Если происходит ошибка — выполняется catch. finally выполняется всегда, независимо от ошибки.


Подробно

Без try/catch: JSON.parse('невалидный JSON'); // Ошибка! Весь скрипт останавливается.

С try/catch: try { JSON.parse('невалидный JSON'); } catch (error) { console.log('Ошибка:', error.message); } // Программа продолжает работу!

Синтаксис: try { // код, который может вызвать ошибку } catch (error) { // выполняется при ошибке // error.message — описание ошибки // error.name — тип ошибки } finally { // выполняется ВСЕГДА }

Типы ошибок:

  • Error — базовый тип
  • TypeError — неправильный тип
  • ReferenceError — необъявленная переменная
  • SyntaxError — синтаксическая ошибка
  • RangeError — значение вне диапазона

Throw — создание собственных ошибок: throw new Error('Что-то пошло не так'); throw new TypeError('Ожидается число');

Когда использовать try/catch:

  • Работа с JSON.parse()
  • Доступ к неизвестным данным (API, пользовательский ввод)
  • Операции с файлами
  • Когда ошибка — ожидаемая ситуация

Ментальная модель

try/catch — как подушка безопасности. Вы прыгаете с высоты (рискованный код), но если что-то пойдёт не так — подушка поймает вас (catch) и не даст разбиться.


Примеры

**Самый простой:**

javascript
try {
  console.log('Начало');
  JSON.parse('не JSON');
  console.log('Конец'); // Не выполнится!
} catch (error) {
  console.log('Ошибка:', error.message);
}
// Начало
// Ошибка: Unexpected token... 

catch перехватывает ошибку, и программа продолжает работу.

**Простой:**

javascript
function parseData(jsonString) {
  try {
    return JSON.parse(jsonString);
  } catch (error) {
    console.error('Невалидный JSON:', error.message);
    return null;
  }
}

parseData('{"name": "Анна"}'); // { name: 'Анна' }
parseData('не JSON');           // null

Функция безопасно обрабатывает ошибку и возвращает null вместо падения.

**Реальный пример:**

javascript
function divide(a, b) {
  if (typeof a !== 'number' || typeof b !== 'number') {
    throw new TypeError('Аргументы должны быть числами');
  }
  if (b === 0) {
    throw new Error('Деление на ноль');
  }
  return a / b;
}

try {
  console.log(divide(10, 2)); // 5
  console.log(divide(10, 0)); // Ошибка!
} catch (error) {
  console.error(error.message); // 'Деление на ноль'
}

throw создаёт собственные ошибки. Это полезно для валидации входных данных.


Частые ошибки

**Неправильно:** Использовать try/catch для всех ошибок

**Почему:** try/catch — для ожидаемых ошибок (невалидный JSON, сетевые запросы). Не для программных ошибок.

**Правильно:** Исправляйте ошибки в коде, а не перехватывайте их.

**Неправильно:** Забывать, что catch ловит только ошибки в try

**Почему:** Ошибка в catch НЕ ловится этим же catch. Нужен вложеный try/catch.

**Правильно:** Каждый try/catch ловит ошибки только в своём try-блоке.

**Неправильно:** Пустой catch

**Почему:** catch (error) {} — игнорирует ошибку. Проблема остаётся невидимой.

**Правильно:** Всегда логируйте ошибку: console.error(error).


Важно запомнить

  • try/catch перехватывает ошибки, не останавливая программу
  • catch(error) — получает объект ошибки
  • finally — выполняется всегда
  • throw new Error() — создание собственных ошибок
  • Используйте для ожидаемых ошибок, не для программных

Связь

Назад: Вы знаете методы строк и чисел (J21-J22) — теперь вы умеете обрабатывать их сбои.

Вперёд: Следующий урок (J24) — пользовательские ошибки: создание собственных типов ошибок.

Материалы курса JS Core — PROlab Academy.