В программировании есть три типа ошибок: (a) Ошибки синтаксиса, (b) Ошибки времени выполнения и (c) Логические ошибки.

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

Синтаксические ошибки, также называемые ошибками синтаксического анализа, происходят во время компиляции на традиционных языках программирования и во время интерпретации в 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 для обработки исключений.

Вы можете catch (поймать) генерируемые программой исключения времени выполнения , но вы не можете поймать ошибки синтаксиса JavaScript.

Try ... catch ... finally синтаксис блока -

<script type="text/javascript">
   <!--
      try {
         // Code to run
         [break;]
      }
     
      catch ( e ) {
         // Code to run if an exception occurs
         [break;]
      }
     
      [ finally {
         // Code that is always executed regardless of
         // an exception occurring
      }]
   //-->
</script>

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

Примеры

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

<html>
   <head>
     
      <script type="text/javascript">
         <!--
            function myFunc()
            {
               var a = 100;
               alert("Value of variable a is : " + a );
            }
         //-->
      </script>
     
   </head>
  
   <body>
      <p>Click the following to see the result:</p>
     
      <form>
         <input type="button" value="Click Me" onclick="myFunc();" />
      </form>
     
   </body>
</html>

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

<html>
  
   <head>
     
      <script type="text/javascript">
         <!--
            function myFunc()
            {
               var a = 100;
               try {
                  alert("Value of variable a is : " + a );
               }
              
               catch ( e ) {
                  alert("Error: " + e.description );
               }
            }
         //-->
      </script>
     
   </head>
  
   <body>
      <p>Click the following to see the result:</p>
     
      <form>
         <input type="button" value="Click Me" onclick="myFunc();" />
      </form>
     
   </body>
</html>

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

<html>
  
   <head>
     
      <script type="text/javascript">
         <!--
            function myFunc()
            {
               var a = 100;
              
               try {
                  alert("Value of variable a is : " + a );
               }
              
               catch ( e ) {
                  alert("Error: " + e.description );
               }
              
               finally {
                  alert("Finally block will always execute!" );
               }
            }
         //-->
      </script>
     
   </head>
  
   <body>
      <p>Click the following to see the result:</p>
     
      <form>
         <input type="button" value="Click Me" onclick="myFunc();" />
      </form>
     
   </body>
</html>
Результат
The throw Statement

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

пример

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

<html>
  
   <head>
     
      <script type="text/javascript">
         <!--
            function myFunc()
            {
               var a = 100;
               var b = 0;
              
               try{
                  if ( b == 0 ){
                     throw( "Divide by zero error." );
                  }
                 
                  else
                  {
                     var c = a / b;
                  }
               }
              
               catch ( e ) {
                  alert("Error: " + e );
               }
            }
         //-->
      </script>
     
   </head>
  
   <body>
      <p>Click the following to see the result:</p>
     
      <form>
         <input type="button" value="Click Me" onclick="myFunc();" />
      </form>
     
   </body>
</html>

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

Метод onerror()

OnError обработчик событий, и это первый признак, чтобы облегчить обработку ошибок в JavaScript. Ошибка событие вызывается на объект окна всякий раз, когда происходит исключение на этой странице.

<html>
  
   <head>
     
      <script type="text/javascript">
         <!--
            window.onerror = function () {
               alert("An error occurred.");
            }
         //-->
      </script>
     
   </head>
  
   <body>
      <p>Click the following to see the result:</p>
     
      <form>
         <input type="button" value="Click Me" onclick="myFunc();" />
      </form>
     
   </body>
</html>

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

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

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

пример
<html>
   <head>
      <script type="text/javascript">
         <!--
            window.onerror = function (msg, url, line) {
               alert("Message : " + msg );
               alert("url : " + url );
               alert("Line number : " + line );
            }
         //-->
      </script>
   
   </head>
  
   <body>
      <p>Click the following to see the result:</p>
     
      <form>
         <input type="button" value="Click Me" onclick="myFunc();" />
      </form>
     
   </body>
</html>

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

<img src="/images/myimage.gif" onerror="alert('An error occurred loading the image.')" /> 

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




Понравилась статья? Поделитесь ею с друзьями и напишите отзыв в комментариях!

We use cookies on our website. Some of them are essential for the operation of the site, while others help us to improve this site and the user experience (tracking cookies). You can decide for yourself whether you want to allow cookies or not. Please note that if you reject them, you may not be able to use all the functionalities of the site.

Ok