В этом руководстве вы узнаете, как использовать оператор 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 { 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
только тот код, который может вызвать исключение.