Ошибки программирования неизбежны. Рано или поздно ваше приложение столкнется с неожиданным поведением. Как и любой другой язык программирования, JavaScript вызывает ошибки, когда что-то идет не так в вашем коде.
Ошибки нарушают нормальный ход приложения. Но они также помогают защитить ваше приложение от непредсказуемого поведения. Очень важно знать, как правильно обрабатывать ошибки.
Почему важна обработка ошибок?
Обработка ошибок способствует улучшению взаимодействия с пользователем. Вы можете заменить ошибки JavaScript по умолчанию, а иногда и подробные сообщения об ошибках, более удобочитаемыми. Вы можете изящно обработать причины некоторых ошибок и поддерживать работу программы, а не закрывать ее.
Обработка ошибок также полезна во время разработки. Вы можете поймать ошибку времени выполнения и сделать с ней что-то полезное, например регистрируя его в консоли браузера. Это более изящно, чем ошибка, вызывающая сбой и не знающая, где и почему произошла ошибка.
Структура встроенных ошибок JavaScript
Ошибки JavaScript — это объекты с тремя свойствами:
- имя: это имя ошибки. Например, отсутствующее имя переменной вызовет ошибку SyntaxError.
- сообщение: это тело сообщения, в котором ошибка поясняется текстом.
- причина: это свойство можно использовать с настраиваемыми ошибками для отслеживания стека вызовов.
Распространенные типы ошибок в JavaScript
Вот некоторые распространенные ошибки, встречающиеся в JavaScript.
Ошибка синтаксиса
Синтаксические ошибки могут возникать, когда JavaScript пытается интерпретировать ваш код. Это вызовет ошибку, если ваш код не соответствует правильному синтаксису. Некоторые распространенные ошибки, которые могут вызывать синтаксические ошибки:
- Отсутствуют имена переменных.
- Отсутствует «}» после функции.
- Отсутствует «)» после условия.
ReferenceError
Ссылочные ошибки возникают, когда программа пытается ссылаться на переменную что недоступно или выходит за рамки.
Ошибка типа
JavaScript может выдавать ошибку типа, когда он не может выполнить операцию, потому что ожидаемый тип отличается от того, который он получает.
URIError
Эта ошибка возникает, если вы неправильно используете глобальную функцию обработки URI, например decodeURIComponent(). В результате происходит сбой кодирования или декодирования.
Агрегатеррор
Эта ошибка используется для представления нескольких ошибок, заключенных в одну. Используйте его, когда хотите выдать много ошибок одновременно. Например, Promise.any() может генерировать AggregateError(), когда все промисы, переданные ему, отклоняются.
Внутренняя ошибка
InternalError возникает, когда внутри движка JavaScript возникает ошибка.
RangeError
Некоторые функции определяют диапазон значений, которые вы можете передавать в качестве аргументов. Эта ошибка возникает при попытке передать значение, не входящее в этот диапазон.
Обработка ошибок при попытке... Поймать блок
JavaScript предоставляет встроенную функциональность обработки исключений с помощью попробуй… поймай… наконец блокировать. Это также позволяет вам вызывать собственные ошибки, используя бросать оператор.
Вы можете использовать блок try…catch для обработки ошибок, возникающих во время выполнения. Вы пишете действительный код, который, как вы ожидаете, будет правильно выполняться в блоке try. В блоке catch вы можете написать код обработки ошибок.
пытаться {
// Действительный код Javascript
} ловить (ошибка) {
// Обработка ошибки
} в конце концов {
// Выполняется даже при возникновении ошибки
}
Блок catch игнорируется, если код в блоке try не вызывает ошибок. Если возникает ошибка, выполнение переходит к блоку catch. Код в блоке finally выполняется вне зависимости от того, произошла ошибка или нет. Этот блок не является обязательным, поэтому опустите его, если он вам не нужен.
Код, который вы включаете в блок try, должен быть действительным. Если это не так, JavaScript выдаст ошибку синтаксического анализа.
Рассмотрим практический пример:
пытаться {
приставка.лог (текст)
} ловить (ошибка) {
приставка.журнал(ошибка.сообщение)
} в конце концов {
console.log("Будет выполнен независимо")
}
Эта программа пытается зарегистрировать значение текстовой переменной. Поскольку эта переменная не определена, программа выдаст ошибку. Эта ошибка выводится на консоль в блоке catch. Затем запускается блок finally и печатает собственное сообщение.
ReferenceError: текст не определен
Будет выполнен независимо
В ситуациях, когда вам нужно вызвать собственную ошибку, используйте бросать оператор.
Рассмотрим этот пример, который выдает ошибку, если данные ложны:
константа данные = получить данные ()
пытаться {
если (!данные) {
бросать "Нет данных"
}
приставка.log (данные)
// Продолжать
} ловить(ошибка) {
приставка.лог (ошибка) // "Нет данных"
}
В этом примере программа вызывает функцию getData() и присваивает ее результат переменной данных. В блоке try блок выдает пользовательскую ошибку, если данные пусты. Блок catch перехватывает эту ошибку и выводит ее на консоль.
Выбрасывание ошибок очень полезно во время разработки. Вы можете использовать специальное сообщение об ошибке, чтобы понять, почему ваше приложение не работает должным образом.
Как показывает этот пример, вы можете использовать строку для объекта ошибки. На самом деле вы можете выдать любое выражение JavaScript как ошибку. Однако для согласованности со встроенными ошибками используйте объект JavaScript, содержащий имя и сообщение.
бросать {
имя: "Название ошибки",
сообщение: "Сообщение об ошибке"
}
Вы также можете использовать встроенные конструкторы JavaScript при выдаче ошибок. Эти конструкторы включают, среди прочего, Error, SyntaxError и ReferenceError.
Чтобы вызвать ошибку с помощью конструктора Error, используйте этот код:
бросатьновыйОшибка("Нет данных")
Теперь вы можете ссылаться на имя и сообщение.
приставка.log (ошибка.имя) // Ошибка
приставка.log (сообщение об ошибке) // Нет данных
Расширение объекта ошибки JavaScript
Пользовательский класс ошибок пригодится при обработке ошибок, которые не соответствуют объектам, уже предоставленным JavaScript. Например, вы можете захотеть изолировать ошибку проверки данных как определенный тип с именем ValidationError.
Вы можете использовать Класс JavaScript ES2015 для создания собственного класса ошибок.
учебный классОшибка проверкирасширяетОшибка{
конструктор(сообщение) {
супер(сообщение);
это.имя = "Ошибка проверки";
}
}
Выдайте ошибку, используя класс ValidationError следующим образом:
бросатьновый ValidationError("Ваше сообщение об ошибке")
Выброшенная ошибка будет объектом с именем и значениями сообщения.
{
имя: "Ошибка проверки",
сообщение: "Ваше сообщение об ошибке"
}
Ошибки помогут
Обработка ошибок — фундаментальная часть программирования, какой бы язык вы ни использовали. JavaScript имеет отличную поддержку для создания и перехвата ошибок в стиле исключений. Он также имеет несколько встроенных типов ошибок, которые вы можете обрабатывать и использовать в своих случаях.
Некоторые ошибки, такие как синтаксические ошибки, могут остаться незамеченными, когда вы пишете JavaScript в «небрежном режиме». Использование строгого режима позволяет JavaScript отлавливать ошибки, которые в противном случае были бы проигнорированы.