Каждый язык программирования должен иметь стиль обработки исключений/ошибок. Для создания надежного приложения необходима правильная обработка ошибок. Сама ошибка является аномалией, например: программа ожидает числовое значение, а выдает строковые данные. Как программист, мы должны решить, когда возникает ошибка, поймать ли ее или выдать ошибку. Для большего понимания давайте углубимся:

  1. оператор броска 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)