JavaScript Ошибки - Throw and Try to Catch (Брось и попробуй поймать)
Оператор try
позволяет проверить блок кода на наличие ошибок.
Оператор catch
позволяет вам обрабатывать ошибку.
Оператор throw
позволяет создавать собственные ошибки.
Оператор finally
позволяет выполнять код после try и catch, независимо от результата.
Ошибки будут!
При выполнении кода 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
Оператор try
позволяет определить блок кода, который будет проверяться на наличие ошибок во время его выполнения. .
Оператор catch
позволяет определить блок кода, который будет выполняться, если в блоке try возникает ошибка.
JavaScript операторы try
и catch
идут в паре:
try {
Блок кода, чтобы попробовать
}
catch(err) {
Блок кода для обработки ошибок
}
JavaScript Выдает ошибки
При возникновении ошибки JavaScript обычно останавливается и генерирует сообщение об ошибке.
Технический термин для этого: JavaScript вызовет исключение (выдаст ошибку).
JavaScript фактически создаст объект ошибки с двумя свойствами: имя и сообщение.
Оператор 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() {
const message =
document.getElementById("p01");
message.innerHTML = "";
let 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 Проверка
The code above is just an example.
Современные браузеры часто используют комбинацию JavaScript и встроенной проверки HTML, используя предопределенные правила проверки, определенные в атрибутах HTML:
<input id="demo" type="number" min="5" max="10" step="1">
Вы можете узнать больше о проверке форм позже в данном учебнике на нашем сайте W3Schools на русском.
Оператор finally
Оператор finally
позволяет выполнять код после try и catch, независимо от результата:
Синтаксис
try {
Блок кода, чтобы попробовать
}
catch(err) {
Блок кода для обработки ошибок
}
finally {
Блок кода, который будет выполняться независимо от результата try / catch
}
Пример
function myFunction() {
const message =
document.getElementById("p01");
message.innerHTML = "";
let 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
Свойство | Описание |
---|---|
name | Устанавливает или возвращает имя ошибки |
message | Устанавливает или возвращает сообщение об ошибке (строку) |
Значения имени ошибки
Свойство имени ошибки может вернуть шесть различных значений:
Имя ошибки | Описание |
---|---|
EvalError | Произошла ошибка в функции eval() |
RangeError | Произошло число "Вне допустимого диапазона" |
ReferenceError | Произошла недопустимая ссылка |
SyntaxError | Произошла синтаксическая ошибка |
TypeError | Произошла ошибка типа |
URIError | Произошла ошибка в encodeURI() |
Шесть различных значений описаны ниже.
Ошибка Eval Error
Ошибка EvalError
указывает на ошибку в функции eval().
Новые версии JavaScript не генерируют EvalError. Вместо этого используйте SyntaxError.
Ошибка Range Error
Ошибка RangeError
выдается, если вы используете число, выходящее за пределы диапазона допустимых значений.
Например: вы не можете установить количество значащих цифр числа равным 500.
Пример
let num = 1;
try {
num.toPrecision(500); // Число не может содержать 500 значащих цифр
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}
Попробуйте сами »
Ошибка Reference Error
ReferenceError
выдаётся, если вы используете (ссылаетесь) на переменную, которая не была объявлена:
Пример
let x = 5;
try {
x = y + 1; // y не может использоваться (ссылаться)
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}
Попробуйте сами »
Ошибка Syntax Error
SyntaxError
выдаётся, если вы пытаетесь запустить код с синтаксической ошибкой.
Пример
try {
eval("alert('Hello)"); // Отсутствие ' приведет к ошибке
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}
Попробуйте сами »
Ошибка Type Error
TypeError
выдаётся, если вы используете значение, выходящее за пределы диапазона ожидаемых типов:
Пример
let num = 1;
try {
num.toUpperCase(); // Вы не можете преобразовать число в верхний регистр
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}
Попробуйте сами »
Ошибка URI (Uniform Resource Identifier - Единый идентификатор ресурса) Error
URIError
выдаётся, если вы используете недопустимые символы в функции URI:
Пример
try {
decodeURI("%%%"); // Вы не можете декодировать URI знаки процента
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}
Попробуйте сами »
Нестандартные Свойства объекта Error
Mozilla и Microsoft определяют некоторые нестандартные свойства объекта ошибки:
fileName (Mozilla)
lineNumber (Mozilla)
columnNumber (Mozilla)
stack (Mozilla)
description (Microsoft)
number (Microsoft)
Не используйте эти свойства на общедоступных веб-сайтах. Они не будут работать во всех браузерах.
Полный справочник Error
Полный справочник по объекту Error смотрите в главе Полный справочник JavaScript Error на нашем сайте W3Schools на русском.