Ошибки JavaScript - Throw и Try to Catch

try Указание позволяет тестировать ошибки в блоке кода.

catch Указание позволяет обрабатывать ошибки.

throw Условие позволяет создавать пользовательские ошибки.

finally Позволяет вам выполнять код, после try и catch, независимо от результата.

Ошибки всегда будут!

При выполнении кода JavaScript могут возникнуть различные ошибки.

Ошибка может быть ошибкой программиста, ошибкой из-за неправильного ввода или из-за других непредвиденных проблем.

Пример

В этом примере мы через 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 фактически создает исключения с двумя свойствами: Объект ошибки:name и message

Условие throw

throw Условие позволяет создавать пользовательские ошибки.

Технически вы можетеВыброс исключения (выброс ошибки)

Исключения могут быть строками, числами, логическими значениями или объектами в JavaScript:

throw "Too big";    // выбросить текст
throw 500;          // выбросить число

Если throw с try и catch Вместе они позволяют контролировать поток программы и создавать пользовательские сообщения об ошибках.

Пример валидации ввода

Этот пример проверяет ввод. Если значение ошибочно, будет выброшено исключение (err).

Этот исключение (err) будет захвачено оператором catch и отобразить пользовательское сообщение об ошибке:

<!DOCTYPE html>
<html>
<body>
<p>Введите число от 5 до 10:</p>
<input id="demo" type="text">
<button type="button" onclick="myFunction()">Тестировать ввод</button>
<p id="message"></p>
<script>
function myFunction() {
    var message, x;
    message = document.getElementById("message");
    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 {
     // Всякий случай выполняющийся блок кода
}

Пример

function myFunction() {
    var message, x;
    message = document.getElementById("message");
    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 = "";
    }
}

Попробуйте сами

Объект ошибки

JavaScript имеет встроенный объект error, который предоставляет информацию об ошибках.

объект ошибки предоставляет два полезных свойства:name и message

свойства объекта ошибки

свойство описание
name устанавливает или возвращает имя ошибки
message устанавливает или возвращает сообщение об ошибке (строку)

Значения имен ошибок

свойство name ошибки может возвращать шесть различных значений:

имя ошибки описание
EvalError ошибка, которая произошла в функции eval()
RangeError произошла ошибка за пределами диапазона чисел
ReferenceError произошла незаконная ссылка
SyntaxError произошла грамматическая ошибка
TypeError произошла ошибка типа
URIError ошибка, которая произошла в encodeURI()

ниже мы подробно рассмотрим эти шесть различных значений.

ошибка eval

EvalError указания на ошибки в функции eval().

новые версии JavaScript не будут выбрасывать какие-либо EvalErrorПожалуйста, используйте SyntaxError замена.

ошибка диапазона

RangeError будет выброшено, если вы используете число за пределами допустимого диапазона значений.

например: вы не можете установить количество значащих цифр числа как 500.

Пример

var num = 1;
try {
    num.toPrecision(500);   // Число не может иметь 500 значащих цифр
 }
catch(err) {
    document.getElementById("demo").innerHTML = err.name;
} 

Попробуйте сами

ошибка ссылки

Если вы используете (ссылка) переменную, которая еще не была объявлена, то ReferenceError будет выброшено:

Пример

var x;
try {
    x = y + 1;   // y не может быть использована (ссылка)
 }
catch(err) {
    document.getElementById("demo").innerHTML = err.name;
} 

Попробуйте сами

грамматическая ошибка

Если вы выполняете код с грамматической ошибкой, то SyntaxError Выброшено:

Пример

try {
    eval("alert('Hello')");   // Пропуск ' вызовет ошибку
}
catch(err) {
     document.getElementById("demo").innerHTML = err.name;
} 

Попробуйте сами

ошибка типа

Если значение, которое вы используете, не находится в ожидаемом диапазоне значений, то TypeError Выброшено:

Пример

var num = 1;
try {
    num.toUpperCase();   // Вы не можете преобразовать цифру в верхний регистр
 }
catch(err) {
    document.getElementById("demo").innerHTML = err.name;
} 

Попробуйте сами

Ошибка URI

Если вы используете非法 символы в функции URI, то URIError Выброшено:

Пример

try {
    decodeURI("%%%");   // Вы не можете кодировать эти проценты в URI
 }
catch(err) {
    document.getElementById("demo").innerHTML = err.name;
} 

Попробуйте сами

Нестандартные свойства объекта Error

Mozilla и Microsoft определили нестандартные свойства объекта error:

  • fileName (Mozilla)
  • lineNumber (Mozilla)
  • columnNumber (Mozilla)
  • stack (Mozilla)
  • description (Microsoft)
  • number (Microsoft)

Не используйте эти свойства на общедоступных веб-сайтах. Они не работают во всех браузерах.