бросить и попробовать...поймать...наконецОператор try определяет блок кода, который нужно запустить (попробовать).
Оператор catch определяет блок кода для обработки любой ошибки.
Оператор finally определяет блок кода, который будет выполняться независимо от результата.
Оператор throw определяет пользовательскую ошибку.
При выполнении кода JavaScript могут возникнуть различные ошибки. происходить.
Ошибки могут быть ошибками кодирования, допущенными программистом, ошибками, возникающими из-за неправильных действий. ввод и другие непредвиденные вещи.
В этом примере мы неправильно написали «alert» как «adddlert», чтобы намеренно создать ошибку:
<p id="demo"></p>
<script>
try {
adddlert("Welcome guest!");
}
catch(err) {
document.getElementById("demo").innerHTML = err.message;
}
</script>Попробуйте сами →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Error Handling</h2>
<p>How to use <b>catch</b> to display an error.</p>
<p id="demo"></p>
<script>
try {
adddlert("Welcome guest!");
}
catch(err) {
document.getElementById("demo").innerHTML = err.message;
}
</script>
</body>
</html>
JavaScript распознает adddlert как ошибку и выполняет поймать код для справиться.
try ... catch
Оператор try позволяет определить блок кода, который будет проверен на наличие ошибок во время выполнения.
Оператор catch позволяет определить блок кода для выполняться, если в блоке try возникает ошибка.
Операторы JavaScript try и catch приходите парами:
try {
Block of code to try
}
catch(err) {
Block of code to handle errors
}При возникновении ошибки JavaScript будет обычно останавливаются и выдают сообщение об ошибке.
Технический термин для этого таков: JavaScript выдаст исключение (выдать ошибку).
JavaScript фактически создаст объект ошибки с двумя свойствами: имя и сообщение.
throwОператор throw позволяет создать собственную ошибку.
Технически вы можете выдать исключение (выдать ошибку).
Исключением может быть JavaScript String, Number, Логическое значение или Объект:
throw "Too big"; // throw a text
throw 500; // throw a numberЕсли вы используете 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.trim() == "") 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>Попробуйте сами →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript try catch</h2>
<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.trim() == "") 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>
Код выше — это всего лишь пример.
Современные браузеры часто используют комбинацию JavaScript и встроенного HTML. проверка с использованием предопределенных правил проверки, определенных в атрибутах HTML:
<input id="demo" type="number" min="5" max="10" step="1">Вы можете прочитать больше о проверке форм в следующей главе этого руководства.
finallyОператор finally позволяет выполнять код после попытки и поймать, независимо от результата:
try {
Block of code to try
}
catch(err) {
Block of code to handle errors
}
finally {
Block of code to be executed regardless of the try / catch result
}function myFunction() {
const message = document.getElementById("p01");
message.innerHTML = "";
let x = document.getElementById("demo").value;
try {
if(x.trim() == "") 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 = "";
}
}Попробуйте сами →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript try catch</h2>
<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.trim() == "") 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 = "Input " + err;
}
finally {
document.getElementById("demo").value = "";
}
}
</script>
</body>
</html>
JavaScript имеет встроенный объект ошибки, который предоставляет информацию об ошибке, когда возникает ошибка.
Объект ошибки предоставляет два полезных свойства: имя и сообщение.
Устанавливает или возвращает имя ошибки
Устанавливает или возвращает сообщение об ошибке (строку)
Свойство имени ошибки может возвращать шесть различных значений:
Произошла ошибка в функции eval().
Произошло число «вне диапазона»
Произошла незаконная ссылка
Произошла синтаксическая ошибка
Произошла ошибка типа
Произошла ошибка в encodeURI().
Ниже описаны шесть различных значений.
EvalError указывает на ошибку в функции eval().
Более новые версии JavaScript не выдают EvalError. Вместо этого используйте SyntaxError.
RangeError выдается, если вы используете число, находящееся за пределами спектр юридических ценностей.
Например: Вы не можете установить количество значащих цифр числа на 500.
let num = 1;
try {
num.toPrecision(500); // A number cannot have 500 significant digits
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}Попробуйте сами →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Errors</h2>
<p>You cannot set the number of significant digits of a number to 500:</p>
<p id="demo">
<script>
let num = 1;
try {
num.toPrecision(500);
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}
</script>
</body>
</html>
ReferenceError выдается, если вы используете (ссылаетесь) на переменную что не было заявлено:
let x = 5;
try {
x = y + 1; // y cannot be used (referenced)
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}Попробуйте сами →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Errors</h2>
<p>You cannot use the value of a non-existing variable:</p>
<p id="demo"></p>
<script>
let x = 5;
try {
x = y + 1;
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}
</script>
</body>
</html>
SyntaxError выдается, если вы пытаетесь оценить код с помощью ошибка синтаксиса.
try {
eval("alert('Hello)"); // Missing ' will produce an error
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
} Попробуйте сами →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Errors</h2>
<p>You cannot evaluate code that contains a syntax error:</p>
<p id="demo"></p>
<script>
try {
eval("alert('Hello)");
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}
</script>
</body>
</html>
TypeError выдается, если вы используете значение, находящееся за пределами диапазон ожидаемых типов:
let num = 1;
try {
num.toUpperCase(); // You cannot convert a number to upper case
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}Попробуйте сами →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Errors</h2>
<p>You cannot convert a number to upper case:</p>
<p id="demo"></p>
<script>
let num = 1;
try {
num.toUpperCase();
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}
</script>
</body>
</html>
URIError выдается, если вы используете недопустимые символы в функции URI:
try {
decodeURI("%%%"); // You cannot URI decode percent signs
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}Попробуйте сами →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Errors</h2>
<p>Some characters cannot be decoded with decodeURI():</p>
<p id="demo"></p>
<script>
try {
decodeURI("%%%");
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}
</script>
</body>
</html>
Mozilla и Microsoft определяют некоторые нестандартные свойства объекта ошибки:
fileName (Mozilla)
lineNumber (Mozilla)
columnNumber (Mozilla)
stack (Mozilla)
description (Microsoft)
number (Microsoft)Не используйте эти свойства на общедоступных веб-сайтах. Они не будут работать во всех браузерах.
Полную информацию об объекте Error можно найти в разделе Полное описание. Справочник ошибок JavaScript.