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

JS Учебник

JS Старт JS Введение JS Установка JS Вывод JS Объявления JS Синтаксис JS Комментарии JS Переменные JS Операторы JS Арифметические JS Присваивание JS Типы данных JS Функции JS Объекты JS События JS Строки JS Методы строки JS Числа JS Методы числа JS Массивы JS Методы массива JS Сортировка массива JS Итерация массива JS Даты JS Форматы дат JS Методы получения дат JS Методы установки дат JS Математические JS Рандомные JS Булевы JS Сравнения JS Условия JS Switch JS Цикл For JS Цикл While JS Прерывание JS Преобразование типов JS Побитовые JS Регулярные выражения JS Ошибки JS Область действия JS Подъём JS Строгий режим JS Ключевое слово this JS Ключевое слово Let JS Ключевое слово Const JS Функции стрелок JS Классы JS Отладка JS Гид по стилю JS Лучшие практики JS Ошибки JS Производительность JS Зарезервированные слова JS Версии JS Версия ES5 JS Версия ES6 JS JSON

JS Формы

JS Формы Формы API

JS Объекты

Определения объектов Свойства объекта Методы объекта Доступ к объектам Конструкторы объектов Прототипы объектов Объект ECMAScript 5

JS Функции

Определения функций Параметры функции Обращение к функции Вызов функции Применение функции Закрытие функции

JS HTML DOM

DOM Введение DOM Методы DOM Документ DOM Элементы DOM HTML DOM CSS DOM Анимация DOM События DOM Слушатель событий DOM Навигация DOM Узлы DOM Коллекции DOM Узловые списки

JS Объектная модель браузера BOM

JS Окно JS Скрин JS Локация JS История JS Навигатор JS Всплывающее оповещение JS Тайминг JS Куки

JS AJAX

AJAX Введение AJAX XMLHttp AJAX Запрос AJAX Отклик AJAX XML Файл AJAX PHP AJAX ASP AJAX База данных AJAX Приложения AJAX Примеры

JS JSON

JSON Введение JSON Синтаксис JSON и XML JSON Типы данных JSON Анализ JSON Stringify JSON Объекты JSON Массивы JSON PHP JSON HTML JSON JSONP

JS и jQuery

jQuery Селекторы jQuery HTML jQuery CSS jQuery DOM

JS Примеры

JS Примеры JS HTML DOM JS HTML Input JS HTML Объекты JS HTML События JS Броузер JS Упражнения JS Викторина JS Сертификат

JS Справочники

JavaScript Объекты HTML DOM Объекты

JavaScript. Уроки для начинающих

JavaScript Ошибки - Операторы try, catch, throw, finally


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

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

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

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


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

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

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

Пример

В этом примере мы написали предупреждение как 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 на самом деле создаст объект Error (ошибка) с двумя свойствами: name (имя) и message (сообщение).


Оператор throw

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

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

Исключением может быть JavaScript String, Number, Boolean или Object:

throw "Too big";    // пропустить текст
throw 500;          // пропустить число

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


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

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

Исключение (err) перехватывается оператором catch, и отображается настраиваемое сообщение об ошибке:

<!DOCTYPE html>
<html>
<body>

<p>Пожалуйста, введите число от 5 до 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, независимо от результата:

Синтаксис

try {
  Блок кода для 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: " + err + ".";
  }
  finally {
    document.getElementById("demo").value = "";
  }
}
Попробуйте сами »

Объект Error (ошибка)

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

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


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

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

Error Name значения

Шесть различных значений могут быть возвращены свойством Error Name (название ошибки):

Error NameОписание
EvalErrorПроизошла ошибка в функции eval()
RangeErrorПроизошло число "вне диапазона"
ReferenceErrorПроизошла недействительная ссылка
SyntaxErrorПроизошла синтаксическая ошибка
TypeErrorПроизошла ошибка типа
URIErrorПроизошла ошибка в encodeURI()

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


Eval Error

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

Более новые версии JavaScript не генерируют EvalError. Вместо этого используется SyntaxError.


Range Error

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

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

Пример

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

Reference Error

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

Пример

var x;
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 генерируется, если вы используете значение, выходящее за пределы диапазона ожидаемых типов:

Пример

var 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;
}
Попробуйте сами »

Свойства объекта Non-Standard Error (нестандартной ошибки)

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

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

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


Полный справочник ошибок

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