Каждый язык программирования должен иметь стиль обработки исключений/ошибок. Для создания надежного приложения необходима правильная обработка ошибок. Сама ошибка является аномалией, например: программа ожидает числовое значение, а выдает строковые данные. Как программист, мы должны решить, когда возникает ошибка, поймать ли ее или выдать ошибку. Для большего понимания давайте углубимся:
- оператор броска Java-скрипта
В java-скрипте мы можем генерировать множество выражений, но лучше всего генерировать экземпляр Error или его подклассы.
throw 'Error2'; // String type
throw 42; // Number type
throw true; // Boolean type
throw {toString: function() { return "I'm an object!"; } };
throw new Error('Problem!'); // throws object error
Класс ошибки:
Error — это общий надкласс всех встроенных классов ошибок (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error),
Он имеет следующие подклассы:
RangeError : указывает значение, которое не находится в наборе или диапазоне допустимых значений.
ReferenceError : указывает, что было обнаружено недопустимое опорное значение.
SyntaxError : Указывает на то, что произошла ошибка синтаксического анализа.
TypeError : используется для обозначения неудачной операции, когда ни один из других
объектов NativeError не является надлежащим указанием на причину сбоя.
URIError : Указывает, что одна из глобальных функций обработки URI использовалась способом, несовместимым с ее определением.
(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/ Global_Objects/RangeError/RangeError
)
Пример использования класса Error:
const err = new Error('Could not find the file');
console.log(Error.prototype.message)
Пользовательский класс ошибок
Основываясь на моем опыте чтения другого стиля кода обработки ошибок, рекомендуется создать собственный класс для обработки ошибок. Как мы знаем, существует 2 типа ошибок: первая обрабатываемая ошибка и необработанная ошибка. Обработанная ошибка означает, что программист знает, где в коде могут быть ошибки, например: ожидаемый ввод является целым числом, но в качестве ввода задано десятичное число или строка. Необработанная ошибка означает, что у программиста нет 100% видимости того, откуда возникла ошибка, например ошибка, вызванная сторонней библиотекой или библиотекой среды выполнения.
class CustomException extends Error{
constructor(errorCode, customMessage) {
super(customMessage)
this.errorCode = errorCode;
this.customMessage = customMessage;
}
}
const customExcep = new CustomException("001", "field must be number");
2. Попробуйте-cath-наконец-то
Try : поместите код с потенциальной ошибкой в оператор try
Catch : перехватите ошибку, вызванную оператором try
Наконец : оператор finally всегда выполняется независимо от ошибки или нет
Мы можем комбинировать try-catch-finally следующим образом:
• Попробуйте поймать
• попробовать-наконец-то
- попробуй-поймай-наконец-то
Syntax of try-catch:
try {
«try_statements»
} catch (error) {
«catch_statements»
}
Syntax of try-finally:
try {
«try_statements»
} finally {
«finally_statements»
}
Syntax of try catch finally:
try {
«try_statements»
} catch (error) {
«catch_statements»
} finally {
«finally_statements»
}
куатом класс
class CustomException extends Error{
constructor(errorCode, customMessage) {
super(customMessage)
this.errorCode = errorCode;
this.customMessage = customMessage;
}
}
try{
throw new CustomException("001", "field must be number");
}
catch(e){
if (e instanceof CustomException){
console.log(e.customMessage);
}
}finally{
console.log("finally always executed");
}
Источник :
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error
Книга: JavaScript для нетерпеливых программистов (издание ES2021)