Учебники

ES6 — Обработка ошибок

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

Синтаксические ошибки

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

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

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

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

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

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

JavaScript генерирует экземпляры объекта Error при возникновении ошибок во время выполнения. В следующей таблице перечислены предопределенные типы объекта Error.

Sr.No Ошибка Объект и описание
1

EvalError

Создает экземпляр, представляющий ошибку, которая возникает в отношении глобальной функции eval () .

2

RangeError

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

3

ReferenceError

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

4

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

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

5

TypeError

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

6

URIError

Создает экземпляр, представляющий ошибку, которая возникает, когда encodeURI () или decodeURI () передают недопустимые параметры.

EvalError

Создает экземпляр, представляющий ошибку, которая возникает в отношении глобальной функции eval () .

RangeError

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

ReferenceError

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

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

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

TypeError

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

URIError

Создает экземпляр, представляющий ошибку, которая возникает, когда encodeURI () или decodeURI () передают недопустимые параметры.

Бросать исключения

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

Синтаксис: генерация общего исключения

throw new Error([message]) 
OR 
throw([message])

Синтаксис: выбрасывание определенного исключения

throw new Error_name([message]) 

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

Обработка исключений выполняется с помощью оператора try … catch . Когда программа встречает исключение, программа завершает работу недружественным образом. Чтобы обезопасить себя от этой непредвиденной ошибки, мы можем заключить наш код в оператор try … catch.

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

Ниже приводится синтаксис для того же.

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  
}]  

пример

var a = 100; 
var b = 0; 
try { 
   if (b == 0 ) { 
      throw(“Divide by zero error.”); 
   } else { 
      var c = a / b; 
   } 
} 
catch( e ) { 
   console.log("Error: " + e ); 
}

Выход

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

Error: Divide by zero error

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

Метод onerror ()

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

пример

<html> 
   <head> 
      <script type = "text/javascript"> 
         window.onerror  =  function () {  
            document.write ("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, вызвавший ошибку.

Сообщение об ошибке — то же сообщение, которое браузер будет отображать для данной ошибки.

URL — файл, в котором произошла ошибка.

Номер строки — номер строки в указанном URL, вызвавший ошибку.

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

пример

<html> 
   <head> 
      <script type = "text/javascript"> 
         window.onerror  =  function (msg, url, line) {  
            document.write ("Message : " + msg );  
            document.write ("url : " + url );  
            document.write ("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> 

Пользовательские ошибки

JavaScript поддерживает концепцию пользовательских ошибок. Следующий пример объясняет то же самое.

Пример 1. Пользовательская ошибка с сообщением по умолчанию

function MyError(message) { 
   this.name = 'CustomError'; 
   this.message = message || 'Error raised with default message'; 
} 
try { 
   throw new MyError(); 
} catch (e) {  
   console.log(e.name);      
   console.log(e.message);  // 'Default Message' 
}

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

CustomError 
Error raised with default message

Пример 2. Пользовательская ошибка с пользовательским сообщением об ошибке

function MyError(message) { 
   this.name = 'CustomError'; 
   this.message = message || 'Default Error Message';  
} try { 
   throw new MyError('Printing Custom Error message'); 
} 
catch (e) { 
   console.log(e.name);      
   console.log(e.message);  
}

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