Оператор try…catch в JavaScript — обработка ошибок

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

В данном примере делается попытка вызвать несуществующую функцию add() :

let result = add(10, 20);
console.log(result);

console.log('Bye');

И движок JavaScript выдает следующую ошибку:

Uncaught TypeError: add is not a function

В сообщении об ошибке говорится, что add не является функцией, а тип ошибки — TypeError.

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

Иногда необходимо обработать ошибку и продолжить выполнение. Синтаксисом:

try {
  // code may cause error
} catch(error){
  // code to handle error
}

В этом синтаксисе:

  • Во-первых, поместите код, который может вызвать ошибку, в блок try.
  • Во-вторых, реализуйте логику обработки ошибки в блоке catch.

Если в блоке try возникает ошибка, движок JavaScript немедленно выполняет код в блоке catch. Кроме того, механизм JavaScript предоставляет вам объект ошибки, содержащий подробную информацию об ошибке.

По сути, объект ошибки имеет как минимум два свойства:

  • name указывает имя ошибки.
  • message подробно объясняет ошибку.

Если в блоке try не возникает ошибок, движок JavaScript игнорирует блок catch.

Обратите внимание, что веб-браузеры могут добавлять дополнительные свойства к объекту error. Например, Firefox добавляет к объекту error свойства filename, lineNumber и stack.

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

На следующей блок-схеме показано, как работает оператор try...catch :

на блок-схеме показано, как работает оператор try...catch

Примеры использования

В следующем примере используется оператор try...catch для обработки ошибки:

try {
  let result = add(10, 20);
  console.log(result);
} catch (e) {
  console.log({ name: e.name, message: e.message });
}
console.log('Bye');

Выход:

{name: 'TypeError', message: 'add is not a function'} 
Bye

В этом примере мы вызываем функцию add() и присваиваем возвращаемое значение переменной result. Поскольку функция add() не существует, движок JavaScript пропускает оператор, выводящий результат на консоль:

console.log(result);

И он немедленно выполняет оператор в блоке catch, который выводит имя ошибки и сообщение:

console.log({ name: e.name, message: e.message });

Поскольку мы уже обработали ошибку, движок JavaScript продолжает выполнять последний оператор:

console.log('Bye');

Вставка блока catch

В следующем примере определяется функция add(), которая возвращает сумму двух аргументов:

const add = (x, y) => x + y;

try {
  let result = add(10, 20);
  console.log(result);
} catch (e) {
  console.log({ name: e.name, message: e.message });
}
console.log('Bye');

Выход:

30 
Bye

В этом примере ошибки не возникает, поскольку существует функция add(). Поэтому движок JavaScript пропускает блок catch.

Идентификатор исключения

Когда в блоке try возникает исключение, переменная исключения в блоке catch сохраняет объект исключения.

Если вы не хотите использовать переменную исключения, вы можете опустить ее следующим образом:

try {
  //...
} catch {
  //...
}

Например, в следующем примере оператор try…catch используется без переменной исключения:

const isValidJSON = (str) => {
  try {
    JSON.parse(str);
    return true;
  } catch {
    return false;
  }
};

let valid = isValidJSON(`{"language":"JavaScript"}`);
console.log(valid);

Как это работает:

  • Во-первых, определите isValidJSON(), которая принимает строку и возвращает true, если эта строка является допустимым JSON, или false в противном случае.

Для проверки JSON функция isValidJSON() использует метод JSON.parse() и оператор try...catch.

Метод JSON.parse() анализирует строку JSON и возвращает объект. Если входная строка не является допустимой JSON, JSON.parse() выдает исключение.

Если исключения не возникает, функция возвращает true в блоке try. В противном случае она возвращает false в блоке catch.

  • Во-вторых, вызовите isValidJSON() и передайте ей строку JSON:
let valid = isValidJSON(`{"language":"JavaScript"}`);

Поскольку входная строка имеет допустимый формат JSON, функция возвращает значение true.

  • В-третьих, выведите result в консоль:
console.log(valid);

Заключение

  • Используйте оператор try...catch для обработки исключений в JavaScript.
  • Помещайте в блок try только тот код, который может вызвать исключение.
Рейтинг
( Пока оценок нет )
Александр Русаков / автор статьи
Программист, разработчик, 12 лет опыта работы в крупных компаниях. Быстро освоил typescript, делюсь своими знаниями на страницах этого сайта.
Загрузка ...
JavaScript и TypeScript