JavaScript Ошибки - брось и попробуй поймать
Это try заявление позволяет вам проверить блок кода на наличие ошибок.
Это catch заявление позволяет вам обработать ошибку.
Это throw заявление позволяет создавать собственные ошибки.
Это finally заявление позволяет выполнить код, после того,
как попытаться поймать, независимо от результата.
Ошибки будут!
При выполнении кода JavaScript могут возникать разные ошибки.
Ошибки могут быть ошибками кодирования, допущенными программистом, ошибками из-за неправильного ввода и другими непредвиденными вещами.
Пример
В этом примере мы написали alert как adddlert, чтобы намеренно выдать ошибку:
<p id="demo"></p>
<script>
try {
adddlert("Welcome guest!");
}
catch(err) {
document.getElementById("demo").innerHTML = err.message;
}
</script>
Попробуйте сами »
JavaScript перехватывает adddlert как ошибку и выполняет код перехвата для ее обработки.
JavaScript попытаться поймать
Заявление try позволяет определить блок кода,
который будет испытан на ошибки при его выполнении.
Заявление catch позволяет определить блок кода,
который будет выполняться, если ошибка происходит в блоке.
Заявление JavaScript try и catch бывают парами:
try {
блок кода для попытки
}
catch(err) {
блок кода для обработки ошибок
}
JavaScript выдает ошибки
При возникновении ошибки JavaScript обычно останавливается и генерирует сообщение об ошибке.
Технический термин для этого: JavaScript вызовет исключение (выдаст ошибку).
JavaScript фактически создаст объект Error с двумя свойствами: именем и сообщением.
Заявление throw
Заявление throw позволяет создать пользовательскую ошибку.
Технически вы можете создать исключение (выдать ошибку).
Исключением может быть JavaScript String, Number, Boolean или Object:
throw "Too big"; // бросаем текст
throw 500; // бросаем число
Если вы используете throw вместе с
try и catch,
вы можете контролировать выполнение программы и генерировать собственные сообщения об ошибках.
Пример проверки ввода
В этом примере исследуется ввод. Если значение неверно, генерируется исключение (ошибка).
Исключение (err) перехватывается заявлением catch, и отображается настраиваемое сообщение об ошибке:
<!DOCTYPE html>
<html>
<body>
<p>Please input a number between
5 and 10:</p>
<input id="demo" type="text">
<button type="button"
onclick="myFunction()">Test Input</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 "empty";
if(isNaN(x)) throw "not a number";
x = Number(x);
if(x < 5) throw
"too low";
if(x > 10) throw "too
high";
}
catch(err) {
message.innerHTML =
"Input is " + err;
}
}
</script>
</body>
</html>
Попробуйте сами »
Проверка HTML
Код выше - всего лишь пример.
Современные браузеры часто используют комбинацию JavaScript и встроенной проверки HTML, используя предопределенные правила проверки, определенные в атрибутах HTML:
<input id="demo" type="number" min="5" max="10" step="1">
Вы можете узнать больше о проверке форм в следующей главе этого руководства.
Заявление finally
Заявление finally позволяет выполнить код,
после того, как попытаться поймать, независимо от результата:
Синтаксис
try {
блок кода для попытки
}
catch(err) {
блок кода для обработки ошибок
}
finally {
блок кода, который будет выполняться независимо от результата try/catch result
}Пример
function myFunction() {
var message, x;
message =
document.getElementById("p01");
message.innerHTML = "";
x =
document.getElementById("demo").value;
try {
if(x == "") throw "is empty";
if(isNaN(x))
throw "is not a number";
x = Number(x);
if(x >
10) throw "is too high";
if(x <
5) throw "is too low";
}
catch(err)
{
message.innerHTML = "Error: " +
err + ".";
}
finally {
document.getElementById("demo").value = "";
}
}
Попробуйте сами »
Объект Error
JavaScript имеет встроенный объект Error, который предоставляет информацию об ошибке при возникновении ошибки.
Объект Error предоставляет два полезных свойства: имя и сообщение.
Свойства объекта Error
| Свойство | Описание |
|---|---|
| имя | Задает или возвращает имя ошибки |
| сообщение | Устанавливает или возвращает сообщение об ошибке (строку) |
Значения имени ошибки
Свойство имени ошибки может вернуть шесть различных значений:
| Имя ошибки | Описание |
|---|---|
| EvalError | Произошла ошибка в функции eval() |
| RangeError | Произошло число "вне допустимого диапазона" |
| ReferenceError | Произошла недопустимая ссылка |
| SyntaxError | Произошла синтаксическая ошибка |
| TypeError | Произошла ошибка типа |
| URIError | Произошла ошибка в encodeURI() |
Ниже описаны шесть различных значений.
Ошибка Eval
Один EvalError указывает на ошибку в функции eval().
Новые версии JavaScript не генерируют EvalError. Вместо этого используйте SyntaxError.
Ошибка Range
Ошибка RangeError возникает, если вы используете число, выходящее за пределы
диапазона допустимых значений.
Например: нельзя установить количество значащих цифр числа на 500.
Пример
var num = 1;
try {
num.toPrecision(500); // Число не может содержать 500 значащих цифр
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}
Попробуйте сами »
Ошибка Reference
Ошибка ReferenceError выбрасывается, если вы используете (reference) переменную,
которая не была объявлена:
Пример
var x;
try {
x = y + 1; // y нельзя referenced (использовать)
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}
Попробуйте сами »
Ошибка Syntax
Ошибка SyntaxError выбрасывается, если вы пытаетесь вычислить код с синтаксической ошибкой.
Пример
try {
eval("alert('Hello)"); // Отсутствует 'вызовет ошибку
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}
Попробуйте сами »
Ошибка Type
Ошибка TypeError выбрасывается, если вы используете значение,
которое находится за пределами диапазона ожидаемых типов:
Пример
var num = 1;
try {
num.toUpperCase(); // Вы не можете преобразовать число в верхний регистр
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}
Попробуйте сами »
Ошибка URI (унифицированного идентификатора ресурса)
Ошибка 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 ..
