САМОСТОЯТЕЛЬНОЕ ОБУЧЕНИЕ ДЛЯ ВЕБ РАЗРАБОТЧИКОВ
×

JS Учебник

JS Главная JS Введение JS Где установить? JS Вывод JS Заявления JS Синтаксис JS Комментарии JS Переменные JS Let JS Const JS Операторы JS Арифметика JS Присваивание JS Типы данных JS Функции JS Объекты JS События JS Строки JS Методы строк JS Поиск строк JS Шаблоны строк JS Числа JS Методы чисел JS Массивы JS Методы массива JS Сортировка массива JS Итерация массива JS Постоянный массив JS Даты JS Формат дат JS Методы получения дат JS Методы набора дат JS Объекты Math JS Случайные числа JS Булевы JS Сравнения JS Оператор If...Else JS Оператор Switch JS Цикл For JS Цикл For In JS Цикл For Of JS Цикл While JS Оператор Break JS Повторяющиеся JS Наборы JS Карты JS Typeof JS Преобразование JS Битовые JS Выражения JS Ошибки JS Область JS Подъемный JS Строгий JS Ключевое слово this JS Стрелки JS Классы JS JSON JS Отладчик JS Стиль JS Практика JS Ошибки JS Эффективность JS Слова

JS Версии

JS Версии JS 2009 (ES5) JS 2015 (ES6) JS 2016 JS 2017 JS 2018 JS IE/Edge JS История

JS Объекты

Определение объекта Свойства объекта Методы объекта Отображение объекта Доступ объекта Конструкторы объекта Прототипы объекта Повторяющиеся объекты Набор объектов Карты объекта Справочник объектов

JS Функции

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

JS Классы

Введение класса Наследование класса Статистический класс

JS Асинхронный

JS Обратный вызов JS Асинхронный JS Обещания JS Асинхронный

JS HTML DOM

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

JS Браузер BOM

JS Window JS Экран JS Расположение JS История JS Навигатор JS Предупреждение JS Синхронизация JS Куки

JS Веб APIы

Веб API Введение Веб API История Веб API Хранилище Веб API Работник Веб API Извлечь Веб API Геолокации

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 Строки JSON Объекты JSON Массивы JSON PHP JSON HTML JSON JSONP

JS или jQuery

jQuery Селекторы jQuery Элементы jQuery CSS jQuery DOM

JS Примеры

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

JS Справочник

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


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



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

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

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

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


Ошибки будут!

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

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

Пример

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


Оператор throw

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

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

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

throw "Слишком большой";    // пропустить текст
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()">Ввод текста</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 "пусто";
    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 {
  блок кода, который будет выполняться независимо от результата try/catch
}

Пример

function myFunction() {
  var message, x;
  message = document.getElementById("p01");
  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 = "";
  }
}
Попробуйте сами »

Объект Error

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

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


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

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

Значения Error Name

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

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

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


Ошибка EvalError

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

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


Ошибка RangeError

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

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

Пример

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

Ошибка ReferenceError

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

Пример

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

Ошибка SyntaxError

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

Пример

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

Ошибка TypeError

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

Пример

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

Ошибка URIError (Единый идентификатор ресурса)

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

Пример

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

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

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

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

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


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

Чтобы получить полную информацию об объекте Error, перейдите в Полный справочник ошибок JavaScript ..