По моменту проявления
- Parse-time — SyntaxError, код даже не запускается.
- Runtime exceptions — падение во время выполнения.
- Logical errors — код «работает», но результат неверный (часто без throw).
Встроенные классы
SyntaxError, ReferenceError, TypeError, RangeError, URIError, AggregateError, … Класс = категория сбоя; доменные ошибки — свои subclasses.
Практика
Ловите то, что можете восстановить/перевести на границе. Неожиданное — пробрасывайте с cause. Логические ошибки ловят тесты и отладка, не только try/catch.
Итог: разделяйте синтаксис / рантайм / логику; встроенные Error-* называют класс проблемы.