Ответ
В JavaScript ошибки делятся на несколько типов:
- SyntaxError - ошибка синтаксиса:
const a = ; // Uncaught SyntaxError: Unexpected token ';'
- ReferenceError - обращение к несуществующей переменной:
console.log(b); // Uncaught ReferenceError: b is not defined
- TypeError - неверный тип данных или операции:
null.foo(); // Uncaught TypeError: Cannot read property 'foo' of null
- RangeError - выход за допустимый диапазон:
new Array(-1); // Uncaught RangeError: Invalid array length
- URIError - ошибка в URI-функциях:
decodeURI('%'); // Uncaught URIError: URI malformed
-
EvalError (редко) - ошибка в eval().
-
Custom Errors - пользовательские ошибки через
class MyError extends Error.
Все ошибки наследуются от базового объекта Error. Можно обрабатывать через try/catch и создавать свои типы ошибок.
Ответ 18+ 🔞
А, ну вот, опять про эти ошибки, блядь! Сидишь ты такой, кодишь, и тут — пиздец, всё посыпалось. А всё потому, что не знаешь, какая сволочь тебя подстерегает. Давай разберём, как они тебя ебут, эти ошибки, по полочкам.
Первая, самая тупая — SyntaxError. Это когда ты пишешь какую-то хуйню, а движок просто не понимает, что от него хотят. Типа:
const a = ; // Uncaught SyntaxError: Unexpected token ';'
Вот смотри, ты объявляешь константу a, а чему она равна? Хуй знает! Точка с запятой висит, а значения нет. Движок смотрит на это и думает: «Мудак, блядь, что за токен неожиданный?». И всё, приехали.
Дальше идёт ReferenceError. Это когда ты такой умный, ссылаешься на какую-то переменную, а её, сука, не существует. Вообще. Нигде.
console.log(b); // Uncaught ReferenceError: b is not defined
«b is not defined», — говорит тебе движок. А ты сидишь и думаешь: «А где ж она, блядь? Я же её вроде объявлял...». А нет, не объявлял. Или объявлял, но в другой вселенной. Короче, пизда.
Потом — TypeError. О, это классика, ёпта! Ты пытаешься сделать что-то с чем-то, что этого делать не умеет. Например, вызвать метод у null.
null.foo(); // Uncaught TypeError: Cannot read property 'foo' of null
«Cannot read property 'foo' of null», — вежливо сообщает тебе движок. А по-русски это: «Ты че, еблан, с null'ом работать собрался? Он же нихуя не объект!». Вот и сидишь с разбитым корытом.
Следующая — RangeError. Это когда ты выходишь за рамки дозволенного, как хулиган. Скажем, попробуешь создать массив с отрицательной длиной.
new Array(-1); // Uncaught RangeError: Invalid array length
«Invalid array length», — говорит тебе движок. «Какой, нахуй, массив с минус одним элементом? Ты в своём уме?». И правильно говорит, кстати.
Дальше — URIError. Эта ошибка вылезает, когда ты криво работаешь с URI-функциями, типа decodeURI или encodeURI.
decodeURI('%'); // Uncaught URIError: URI malformed
«URI malformed», — то есть «URI кривой, как рога». Потому что один процент — это не валидный URI, блядь. Нужно что-то типа %20. А ты — нет.
Есть ещё EvalError, но это такая редкость, что про неё можно и не говорить. Как единорог, блядь. Встретишь — считай, повезло.
И наконец, самое вкусное — Custom Errors, свои собственные ошибки. Ты можешь нахуярить своих монстров, которые наследуются от базового Error.
class MySuperError extends Error {
constructor(message) {
super(message);
this.name = 'MySuperError';
}
}
throw new MySuperError('Всё пропало, шеф!');
Все эти твари, блядь, наследуются от одного папаши — объекта Error. И их всех можно ловить в try/catch, как бабочек сачком. А можно и не ловить — тогда пользователь увидит их в консоли и подумает, что ты криворукий дегенерат. Выбор за тобой, ёпта.