JavaScript Ошибки - брось и попробуй поймать
Оператор try
позволяет вам проверить блок кода на наличие ошибок.
Оператор catch
позволяет вам обработать ошибку.
Оператор throw
позволяет создавать собственные ошибки.
Оператор finally
позволяет выполнить код, после того, как попытаться поймать, независимо от результата.
Ошибки будут!
При выполнении кода JavaScript могут возникать разные ошибки.
Ошибки могут быть ошибками кодирования, допущенны программистом, ошибками из-за неправильного ввода или другими непредвиденными ситуациями.
Пример
В этом примере мы в место alert написали adddlert, чтобы намеренно выдать ошибку:
<p id="demo"></p>
<script>
try {
adddlert("Добро пожаловать!");
}
catch(err) {
document.getElementById("demo").innerHTML = err.message;
}
</script>
Попробуйте сами »
JavaScript перехватывает adddlert, как ошибку и выполняет код перехвата для ее обработки.
JavaScript try и catch
Оператор try
, позволяет обнаружить блок кода, который будет проверяться на наличие ошибок во время его выполнения.
Оператор catch
, позволяет поймать блок кода, который будет выполняться, если в блоке try возникает ошибка.
Оператор JavaScript try
и catch
идут в парах:
try {
Блок кода для проверки
}
catch(err) {
Блок кода для обработки ошибок
}
JavaScript выдает ошибки
Когда происходит ошибка, JavaScript обычно останавливается и генерирует сообщение об ошибке.
Технический термин для этого: JavaScript вызовет исключение (выдаст ошибку).
JavaScript фактически создаст объект Error с двумя свойствами: name и message.
Оператор throw
Оператор throw
позволяет создать пользовательскую ошибку.
Технически вы можете сгенерировать исключение (сгенерировать ошибку).
Исключением может быть JavaScript String
, Number
, Boolean
или Object
:
throw "Слишком большой"; // пропустить текст
throw 500; // пропустить число
Если вы используете throw
вместе с try
и catch
, вы можете контролировать выполнение программы и генерировать собственные сообщения об ошибках.
Пример проверки ввода
В этом примере исследуется ввод. Если значение неверно, генерируется исключение (ошибка).
Исключение (err) перехватывается оператором catch, и отображается настраиваемое сообщение об ошибке:
<!DOCTYPE html>
<html>
<body>
<p>Пожалуйста, введите число от 5 до 10:</p>
<input id="demo" type="text">
<button type="button"
onclick="myFunction()">Ввод текста</button>
<p id="p01"></p>
<script>
function myFunction() {
var message, x;
message =
document.getElementById("p01");
message.innerHTML = "";
x =
document.getElementById("demo").value;
try {
if(x == "") throw "пусто";
if(isNaN(x)) throw "не число";
x = Number(x);
if(x < 5) throw
"слишком маленькое";
if(x > 10) throw "слишком
большое";
}
catch(err) {
message.innerHTML =
"Вывод " + err;
}
}
</script>
</body>
</html>
Попробуйте сами »
Проверка HTML на валидность
Код выше - является просто примером.
Современные браузеры часто используют комбинацию JavaScript и встроенной проверки HTML, используя предопределенные правила проверки, определенные в атрибутах HTML:
<input id="demo" type="number" min="5" max="10" step="1">
Вы можете узнать больше о проверке форм в следующей главе этого руководства.
Оператор finally
Оператор finally
позволяет выполнить код, после try и catch, еще раз попытаться поймать, независимо от результата:
Синтаксис
try {
блок кода для попытки обнаружить ошибки
}
catch(err) {
блок кода для обработки поймать ошибки
}
finally {
блок кода, который будет выполняться независимо от результата try/catch
}
Пример
function myFunction() {
var message, x;
message =
document.getElementById("p01");
message.innerHTML = "";
x =
document.getElementById("demo").value;
try {
if(x == "") throw "пусто";
if(isNaN(x))
throw "не число";
x = Number(x);
if(x >
10) throw "слишком большое";
if(x <
5) throw "слишком маленькое";
}
catch(err)
{
message.innerHTML = "Ошибка: " +
err + ".";
}
finally {
document.getElementById("demo").value = "";
}
}
Попробуйте сами »
Объект Error
JavaScript имеет встроенный объект Error, который предоставляет информацию об ошибке при возникновении ошибки.
Объект Error предоставляет два полезных свойства: имя и сообщение.
Свойства объекта Error
Свойство | Описание |
---|---|
имя | Задает или возвращает имя ошибки |
сообщение | Устанавливает или возвращает сообщение об ошибке (строку) |
Значения Error Name
Шесть различных значений могут быть возвращены свойством Error Name:
Error Name | Описание |
---|---|
EvalError | Произошла ошибка в функции eval() |
RangeError | Произошло число "вне допустимого диапазона" |
ReferenceError | Произошла недопустимая ссылка |
SyntaxError | Произошла синтаксическая ошибка |
TypeError | Произошла ошибка типа |
URIError | Произошла ошибка в encodeURI() |
Ниже описаны шесть различных значений.
Ошибка EvalError
Один EvalError
указывает на ошибку в функции eval().
Новые версии JavaScript не генерируют EvalError. Вместо этого используйте SyntaxError.
Ошибка RangeError
Ошибка RangeError
генерируется, если вы используете число, выходящее за пределы диапазона допустимых значений.
Например: Вы не можете установить количество значащих цифр числа на 500.
Пример
var num = 1;
try {
num.toPrecision(500); // Число не может содержать 500 значащих цифр
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}
Попробуйте сами »
Ошибка ReferenceError
Ошибка ReferenceError
генерируется, если вы используете (ссылаетесь на неё) переменную,
которая не была объявлена:
Пример
var x;
try {
x = y + 1; // на y нельзя ссылаться (использовать)
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}
Попробуйте сами »
Ошибка SyntaxError
Ошибка SyntaxError
генерируется, если вы пытаетесь запустить код с синтаксической ошибкой.
Пример
try {
eval("alert('Привет)"); // Отсутствует 'вызовет ошибку
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}
Попробуйте сами »
Ошибка TypeError
Ошибка TypeError
генерируется, если вы используете значение, которое находится за пределами диапазона ожидаемых типов:
Пример
var num = 1;
try {
num.toUpperCase(); // Вы не можете преобразовать число в верхний регистр
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}
Попробуйте сами »
Ошибка URIError (Единый идентификатор ресурса)
Ошибка URIError
генерируется, если вы используете недопустимые символы в функции URI:
Пример
try {
decodeURI("%%%"); // Вы не можете декодировать знаки процента URI
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}
Попробуйте сами »
Нестандартные свойства объекта ошибок
Mozilla и Microsoft определяют некоторые нестандартные свойства объекта ошибки:
fileName (Mozilla)
lineNumber (Mozilla)
columnNumber (Mozilla)
stack (Mozilla)
description (Microsoft)
number (Microsoft)
Не используйте эти свойства на общедоступных веб-сайтах. Они не будут работать во всех браузерах.
Полный справочник ошибок
Чтобы получить полную информацию об объекте Error, перейдите в Полный справочник ошибок JavaScript ..