JavaScript try ... catch ... finally Заявление

В этом руководстве вы узнаете об операторах try… catch… finally для обработки исключений в JavaScript с помощью примеров.

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

Типы ошибок

В программировании в коде могут быть два типа ошибок:

Синтаксическая ошибка : ошибка в синтаксисе. Например, если вы пишете consol.log('your result');, вышеуказанная программа выдает синтаксическую ошибку. В consoleприведенном выше коде есть ошибка в написании .

Ошибка выполнения : этот тип ошибки возникает во время выполнения программы. Например,
вызов недопустимой функции или переменной.

Эти ошибки, возникающие во время выполнения, называются исключениями . Теперь давайте посмотрим, как вы можете обрабатывать эти исключения.

Оператор JavaScript try… catch

Оператор try… catchиспользуется для обработки исключений. Его синтаксис:

 try ( // body of try ) catch(error) ( // body of catch )

Основной код находится внутри tryблока. При выполнении tryблока, если возникает ошибка, он переходит в catchблок. catchБлок обрабатывает ошибки , как в заявлениях об улове.

Если ошибки не возникает, код внутри tryблока выполняется, а catchблок пропускается.

Пример 1. Отображение необъявленной переменной

 // program to show try… catch in a program const numerator= 100, denominator = 'a'; try ( console.log(numerator/denominator); // forgot to define variable a console.log(a); ) catch(error) ( console.log('An error caught'); console.log('Error message: ' + error); )

Вывод

 NaN Обнаружена ошибка Сообщение об ошибке: ReferenceError: a не определено

В приведенной выше программе переменная не определена. Когда вы пытаетесь напечатать переменную, программа выдает ошибку. Эта ошибка зафиксирована в catchблоке.

JavaScript try… catch… finally Заявление

Вы также можете использовать try… catch… finallyоператор для обработки исключений. finallyБлок выполняется как , когда код выполняется успешно , или в случае возникновения ошибки.

Синтаксис try… catch… finallyблока:

 try ( // try_statements ) catch(error) ( // catch_statements ) finally() ( // codes that gets executed anyway )

Пример 2: попробуйте… поймать… наконец Пример

 const numerator= 100, denominator = 'a'; try ( console.log(numerator/denominator); console.log(a); ) catch(error) ( console.log('An error caught'); console.log('Error message: ' + error); ) finally ( console.log('Finally will execute every time'); )

Вывод

 NaN Обнаружена ошибка Сообщение об ошибке: ReferenceError: a не определено Наконец, будет выполняться каждый раз

В приведенной выше программе возникает ошибка, и эта ошибка перехватывается catchблоком. finallyБлок будет выполняться в любой ситуации (если программа выполняется успешно , или в случае возникновения ошибки).

Примечание : вам нужно использовать оператор catchили finallyпосле tryоператора. В противном случае программа выдаст ошибку Uncaught SyntaxError: Missing catch или, наконец, после попытки.

JavaScript try … catch в setTimeout

Не try… catchбудет перехватывать исключение, если оно произошло в " синхронизированном " коде, например, в setTimeout (). Например,

 try ( setTimeout(function() ( // error in the code ), 3000); ) catch (e) ( console.log( "won't work" ); )

Вышеуказанное try… catchне будет работать, потому что движок уже покинул try… catchконструкцию, а функция выполняется позже.

try… catchБлок должен быть внутри этой функции , чтобы поймать исключение внутри таймерной функции. Например,

 setTimeout(function() ( try ( // error in the code ) catch ( console.log( "error is caught" ); ) ), 3000);

Вы также можете использовать throwоператор с try… catchоператором для использования пользовательских исключений. Например, некоторое число делится на 0 . Если вы хотите рассматривать это Infinityкак ошибку в программе, вы можете вызвать определяемое пользователем исключение, используя throwоператор для обработки этого условия.

Вы узнаете об операторе throw в JavaScript в следующем руководстве.

Интересные статьи...