Последние новости:

Поиск по сайту:

То, что стоит сделать, стоит сделать хорошо (Н. Пуссен).

JavaScript — Обработка ошибок и исключений

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...
17.11.2017
JavaScript - Обработка ошибок и исключений

Есть три типа ошибок в программировании:

  • синтаксические ошибки,
  • ошибки времени выполнения,
  • логические ошибки.

Ошибки синтаксиса

Синтаксические ошибки, также называемые ошибками синтаксического анализа, происходят во время компиляции в традиционных языках программирования и в интерпретации времени в JavaScript.

Например, следующая строка вызывает ошибку синтаксиса, поскольку отсутствует закрывающая скобка.

<script type="text/javascript">
   <!--
      window.print(;
   //-->
</script>

 

При возникновении синтаксической ошибки в JavaScript затрагивается только код, содержащийся в том же потоке, что и синтаксическая ошибка, а остальная часть кода в других потоках выполняется при условии, что он не зависит от кода, содержащего ошибку.

Ошибки времени выполнения

Ошибки времени выполнения, называемые также исключениями, происходят во время выполнения (после компиляции/интерпретации).

Например, следующая строка вызовет ошибку во время выполнения, поскольку здесь синтаксис является правильным, но во время выполнения, он пытается вызвать метод, который не существует.

<script type="text/javascript">
   <!--
      window.printme();
   //-->
</script>

 

Исключения также влияют на поток, в котором они происходят, позволяя другие потоки JavaScript, продолжить нормальное выполнение.

Логические ошибки

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

Вы не можете поймать эти ошибки, потому что это зависит от ваших потребностей бизнеса, какой тип логики вы хотите поместить в вашей программе.

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

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

Можно перехватить исключения, созданные программистом, и исключения среды выполнения, но нельзя перехватить ошибки синтаксиса JavaScript.

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

<script type="text/javascript">
   <!--
      try {
         // Выполняемый код
         [break;]
      } 
      
      catch ( e ) {
         // Код для запуска при возникновении исключения
         [break;]
      }
      
      [ finally {
         // Код, который выполняется всегда, независимо от
         // возникающего исключение
      }]
   //-->
</script>

 

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

Примеры

Вот пример, где мы пытаемся вызвать несуществующую функцию, которая, в свою очередь поднимает исключение. Давайте посмотрим, как ведет себя без Try … Catch:

<html>
   <head>
      
      <script type="text/javascript">
         <!--
            function myFunc()
            {
               var a = 100;
               alert("Значение переменной : " + a );
            }
         //-->
      </script>
      
   </head>
   
   <body>
      <p>Нажмите ниже, чтобы увидеть результат:</p>
      
      <form>
         <input type="button" value="Кликни меня" onclick="myFunc();" />
      </form>
      
   </body>
</html>

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

<html>
   
   <head>
      
      <script type="text/javascript">
         <!--
            function myFunc()
            {
               var a = 100;
               try {
                  alert("Значение переменной: " + a );
               } 
               
               catch ( e ) {
                  alert("Ошибка: " + e.description );
               }
            }
         //-->
      </script>
      
   </head>
   
   <body>
      <p>Нажмите ниже, чтобы увидеть результат:</p>
      
      <form>
         <input type="button" value="Нажмите меня" onclick="myFunc();" />
      </form>
      
   </body>
</html>

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

<html>
   
   <head>
      
      <script type="text/javascript">
         <!--
            function myFunc()
            {
               var a = 100;
               
               try {
                  alert("Значение переменной : " + a );
               }
               
               catch ( e ) {
                  alert("Ошибка: " + e.description );
               }
               
               finally {
                  alert("Блок finally всегда будет выполняться!" );
               }
            }
         //-->
      </script>
      
   </head>
   
   <body>
      <p>Нажмите ниже, чтобы увидеть результат:</p>
      
      <form>
         <input type="button" value="Кликни меня" onclick="myFunc();" />
      </form>
      
   </body>
</html>

Заявление throw

Вы можете использовать заявление throw чтобы поднять встроенные исключения или настроенные исключения. Позже эти исключения могут быть захвачены и вы можете принять соответствующие меры.

Пример

В следующем примере показано, как использовать заявление throw.

<html>
   
   <head>
      
      <script type="text/javascript">
         <!--
            function myFunc()
            {
               var a = 100;
               var b = 0;
               
               try{
                  if ( b == 0 ){
                     throw( "Ошибка деления на ноль." ); 
                  }
                  
                  else
                  {
                     var c = a / b;
                  }
               }
               
               catch ( e ) {
                  alert("Ошибка: " + e );
               }
            }
         //-->
      </script>
      
   </head>
   
   <body>
      <p>Нажмите ниже, чтобы увидеть результат:</p>
      
      <form>
         <input type="button" value="Кликни меня" onclick="myFunc();" />
      </form>
      
   </body>
</html>

Вы можете вызвать исключение в одной функции, используя строку, целое число, логическое значение, или объект, а затем вы можете захватить это исключение либо в одной и той же функции, как мы делали выше, или в другой функции с помощью блока Try … Catch.

Метод OnError()

Обработчик событий onerror был первой функцией, облегчающей обработку ошибок в JavaScript. Событие ошибки возникает на объекте окна всякий раз, когда на странице возникает исключение.

<html>
   
   <head>
      
      <script type="text/javascript">
         <!--
            window.onerror = function () {
               alert("Произошла ошибка.");
            }
         //-->
      </script>
      
   </head>
   
   <body>
      <p>Нажмите ниже, чтобы увидеть результат:</p>
      
      <form>
         <input type="button" value="Кликни меня" onclick="myFunc();" />
      </form>
      
   </body>
</html>

Обработчик событий OnError содержит три части информации, чтобы определить точный характер ошибки:

  • Сообщение об ошибке — То же самое сообщение, что браузер будет отображать для данной ошибки
  • URL — файл, в котором произошла ошибка
  • Номер строки — номер строки в данном URL, который вызвал ошибку

Вот пример, чтобы показать, как извлечь эту информацию.

Пример

<html>
   
   <head>
      
      <script type="text/javascript">
         <!--
            window.onerror = function (msg, url, line) {
               alert("Сообщение : " + msg );
               alert("url : " + url );
               alert("Номер строки : " + line );
            }
         //-->
      </script>
      
   </head>
   
   <body>
      <p>Нажмите ниже, чтобы увидеть результат:</p>
      
      <form>
         <input type="button" value="Кликни меня" onclick="myFunc();" />
      </form>
      
   </body>
</html>

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

Вы можете использовать метод OnError, как показано ниже, чтобы отобразить сообщение об ошибке в случае, если есть какие — либо проблемы при загрузке изображения.

<img src="andreyeximage.gif" onerror="alert('Произошла ошибка при загрузке изображения.')" />

 

Вы можете использовать OnError со многими HTML-тегами для отображения соответствующих сообщений в случае возникновения ошибок.

 

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Если статья понравилась, то поделитесь ей в социальных сетях:

Читайте также

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

**ссылки nofollow

0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии

Статьи партнеров:

0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам:

Заполните форму и наш менеджер перезвонит Вам в самое ближайшее время!

badge
Обратный звонок 1
Отправить

Спасибо! Ваша заявка принята

close

Спасибо! Ваша заявка принята

close