ЛУЧШИЙ САЙТ ДЛЯ РАЗРАБОТЧИКОВ
×

JavaScript учебник

JS HOME JS Introduction JS Where To JS Output JS Statements JS Syntax JS Comments JS Variables JS Operators JS Arithmetic JS Assignment JS Data Types JS Functions JS Objects JS Scope JS Events JS Strings JS String Methods JS Numbers JS Number Methods JS Arrays JS Array Methods JS Array Sort JS Array Iteration JS Dates JS Date Formats JS Date Get Methods JS Date Set Methods JS Math JS Random JS Booleans JS Comparisons JS Conditions JS Switch JS Loop For JS Loop While JS Break JS Type Conversion JS Bitwise JS RegExp JS Errors JS Debugging JS Hoisting JS Strict Mode JS this Keyword JS Style Guide JS Best Practices JS Mistakes JS Performance JS Reserved Words JS Versions JS Version ES5 JS Version ES6 JS JSON

JS Forms

JS Forms Forms API

JS Objects

Object Definitions Object Properties Object Methods Object Constructors Object Prototypes

JS Functions

Function Definitions Function Parameters Function Invocation Function Call Function Apply Function Closures

JS HTML DOM

DOM Intro DOM Methods DOM Document DOM Elements DOM HTML DOM CSS DOM Animations DOM Events DOM Event Listener DOM Navigation DOM Nodes DOM Collections DOM Node Lists

JS Browser BOM

JS Window JS Screen JS Location JS History JS Navigator JS Popup Alert JS Timing JS Cookies

JS AJAX

AJAX Intro AJAX XMLHttp AJAX Request AJAX Response AJAX XML File AJAX PHP AJAX ASP AJAX Database AJAX Applications

JS JSON

JSON Intro JSON Syntax JSON vs XML JSON Data Types JSON Objects JSON Arrays JSON Parse JSON Stringify JSON PHP JSON HTML JSON JSONP

JS References

JavaScript Objects HTML DOM Objects


JavaScript Ошибки-бросать и пытаться поймать


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

Оператор catch позволяет обработать ошибку.

Инструкция throw позволяет создавать пользовательские ошибки.

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


Ошибки будут происходить!

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

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

Пример

In this example we have written alert as adddlert to deliberately produce an error:

<p id="demo"></p>

<script>
try {
    adddlert("Welcome guest!");
}
catch(err) {
    document.getElementById("demo").innerHTML = err.message;
}
</script>

JavaScript ловит адддлерт как ошибку и выполняет код catch для его обработки.


JavaScript попробовать и поймать

Инструкция try позволяет определить блок кода для проверки на наличие ошибок во время его выполнения.

Инструкция catch позволяет определить блок кода, который будет выполняться, если в блоке try возникает ошибка.

Операторы JavaScript try и catch поставляются парами:

try {
    Block of code to try
}
catch(err) {
    Block of code to handle errors
}


JavaScript бросает ошибки

При возникновении ошибки JavaScript обычно останавливается и генерирует сообщение об ошибке.

Технический термин для этого: JavaScript будет генерировать исключение (выбросить ошибку).

JavaScript фактически создаст объект Error с двумя свойствами: Name и Message.


Инструкция throw

Инструкция throw позволяет создать пользовательскую ошибку.

Технически вы можете вызвать исключение (выбросить ошибку).

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

throw "Too big";    // throw a text
throw 500;          // throw a number

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


Пример проверки ввода

В этом примере анализируется ввод. Если значение неверно, генерируется исключение (ERR).

Исключение (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 позволяет выполнять код после 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 "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: " +

Объект Error

JavaScript имеет встроенный объект Error, предоставляющий сведения об ошибке при возникновении ошибки.

Объект Error предоставляет два полезных свойства: Name и Message.


Свойства объекта Error

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

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

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

ОшибкиОписание
EvalErrorAn error occurred in the eval () function
RangeErrorЧисло "вне диапазона" произошло
ReferenceErrorПроизошла незаконная ссылка
SyntaxErrorПроизошла синтаксическая ошибка
TypeErrorПроизошла ошибка типа
URIErrorПроизошла ошибка в encodeURI ()

Шесть различных значений описаны ниже.


Ошибка eval

евалеррор указывает на ошибку в функции eval ().

Новые версии JavaScript не выбрасывают никаких евалеррор. Вместо этого используйте синтаксическая ошибка.


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

RangeError создается, если используется число, которое выходит за пределы диапазона правовых значений.

Например: нельзя задать число значащих цифр числа 500.

Пример

var num = 1;
try {
    num.toPrecision(500);   // A number cannot have 500 significant digits
}
catch(err) {
    document.getElementById("demo").innerHTML = err.name;
}

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

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

Пример

var x;
try {
    x = y + 1;   // y cannot be referenced (used)
}
catch(err) {
    document.getElementById("demo").innerHTML = err.name;
}

Синтаксическая ошибка

При попытке вычисления кода с ошибкой синтаксиса создается Синтаксическая ошибка.

Пример

try {
    eval("alert('Hello)");   // Missing ' will produce an error
}
catch(err) {
    document.getElementById("demo").innerHTML = err.name;
}

Ошибка типа

Если используется значение, находящиеся вне диапазона ожидаемых типов, создается TypeError.

Пример

var num = 1;
try {
    num.toUpperCase();   // You cannot convert a number to upper case
}
catch(err) {
    document.getElementById("demo").innerHTML = err.name;
}

Ошибка URI

При использовании недопустимых символов в функции URI создается уриеррор :

Пример

try {
    decodeURI("%%%");   // You cannot URI decode these percent signs
}
catch(err) {
    document.getElementById("demo").innerHTML = err.name;
}

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

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

имя файла (Mozilla)
LineNumber (Mozilla)
колумннумбер (Mozilla)
стек (Mozilla)
Описание (Майкрософт)
номер (Майкрософт)

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