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