Обработка ошибок
Для обработки ошибок JavaScript использует выражение try...catch
. По большому счету, при прочтении этой книги вам не нужно будет задумываться об обработке ошибок, потому что я делаю упор на объяснении возможностей и особенностей jQuery, а не на программировании в целом. В листинге 4-32 показано, как использовать это выражение.
Листинг 4-32: Обработка исключения
<!DOCTYPE HTML>
<html>
<head>
<title>Example</title>
<script type="text/javascript">
try {
var myArray;
for (var i = 0; i < myArray.length; i++) {
console.log("Index " + i + ": " + myArray[i]);
}
} catch (e) {
console.log("Error: " + e);
}
</script>
</head>
<body>
This is a simple example
</body>
</html>
Проблема, описанная в данном скрипе, довольно распространенная. Я пытаюсь использовать переменную, которая не была должным образом инициализирована. Я вставил ту часть кода, где, как я думаю, может возникнуть ошибка, в блок try
. Если ошибки не возникнет и выражения будут выполнены, тогда блок catch
будет просто проигнорирован.
Если есть ошибка, тогда выполнение выражения в блоке try
сразу же прекратится, а управление перейдет блоку catch
. Встречающиеся ошибки описываются объектом Error
, которые передаются в блок catch
. В таблице 4-5 показаны свойства объекта Error
.
Таблица 4-5: Объект Error
Свойство | Описание | Возвращает |
message |
Описание ошибки | string |
name |
Название ошибки. По умолчанию объект Error |
string |
number |
Код ошибки. Если ошибок несколько, то указанной ошибки | number |
Блок catch
– это возможность для восстановления и очистки кода после ошибок. Если есть выражения, которые должны быть выполнены независимо от того, была ошибка или нет, их можно разместить в необязательном блоке finally
, как показано в листинге 4-33.
Листинг 4-33: Использование блока finally
<!DOCTYPE HTML>
<html>
<head>
<title>Example</title>
<script type="text/javascript">
try {
var myArray;
for (var i = 0; i < myArray.length; i++) {
console.log("Index " + i + ": " + myArray[i]);
}
} catch (e) {
Console.log("Error: " + e);
} finally {
console.log("Statements here are always executed");
}
</script>
</head>
<body>
This is a simple example
</body>
</html>