Ошибки времени выполнения (runtime errors) возникают во время выполнения кода JavaScript, в отличие от синтаксических ошибок, которые обнаруживаются при парсинге скрипта. Такие ошибки могут приводить к аварийному завершению работы функций, нарушению логики приложения и некорректному отображению интерфейса. Консоль браузера является основным инструментом для выявления и анализа подобных ошибок.
ReferenceError Возникает при обращении к переменной, которая не была объявлена. Пример:
console.log(nonExistentVariable);
Консоль выдаст:
ReferenceError: nonExistentVariable is not defined
Этот тип ошибки сигнализирует о проблемах с областью видимости или опечатках в именах переменных.
TypeError Происходит при попытке выполнить операцию над значением неподходящего типа. Пример:
const num = 5;
num.toUpperCase();
Консоль выдаст:
TypeError: num.toUpperCase is not a function
Часто встречается при работе с объектами, массивами и строками, когда методы вызываются некорректно.
SyntaxError Вызывается при нарушении синтаксиса
JavaScript. Обычно обнаруживается на этапе выполнения, если скрипт
загружается динамически через eval или
new Function. Пример:
eval('var a = ;');
Консоль покажет:
SyntaxError: Unexpected token ;RangeError Возникает при недопустимом значении, выходящем за пределы допустимого диапазона. Пример:
const arr = new Array(-1);
Консоль выдаст:
RangeError: Invalid array lengthURIError Проявляется при некорректной обработке
URI методов decodeURI, encodeURI и
аналогичных. Пример:
decodeURIComponent('%');
Консоль выдаст:
URIError: URI malformedСтек вызовов (stack trace) Консоль предоставляет полный стек вызовов, указывающий путь, по которому произошла ошибка. Это позволяет быстро локализовать проблемный участок кода.
Подсветка исходного файла Современные браузеры указывают строку и файл, где произошла ошибка. В Chrome и Firefox строки кода кликабельны, что позволяет перейти непосредственно к исходнику.
Встроенные предупреждения (warnings) Помимо ошибок, консоль может отображать предупреждения, которые не останавливают выполнение кода, но сигнализируют о потенциальных проблемах, например, использование устаревших API.
try...catch для обработки ошибокДля предотвращения аварийного завершения скрипта используется
конструкция try...catch. Она позволяет перехватывать ошибки
и обрабатывать их безопасно.
try {
riskyFunction();
} catch (error) {
console.error('Произошла ошибка:', error.message);
}
Ключевые моменты:
error.message содержит текст ошибки.error.name указывает тип ошибки
(TypeError, ReferenceError и др.).try...catch не перехватывает синтаксические ошибки,
которые появляются при загрузке скрипта.При использовании Sw-precache для генерации service worker важно учитывать, что ошибки времени выполнения могут появляться как на клиентской стороне, так и внутри скрипта service worker. Наиболее типичные сценарии:
Ошибка при кешировании ресурсов Если URL ресурса недоступен или возвращает 404, консоль может выдавать:
Failed to fetch resource: the server responded with a status of 404Ошибка в обработчике события fetch Service
worker обрабатывает запросы через
self.addEventListener('fetch', ...). Ошибки в обработчике
приводят к:
TypeError: Failed to fetch
При этом важно использовать event.respondWith и
корректно обрабатывать исключения, чтобы не нарушить работу
офлайн-режима.
Некорректная конфигурация Sw-precache
Неправильные пути в массиве staticFileGlobs или
некорректные опции могут приводить к ReferenceError или другим runtime
errors.
console.error() — выводит сообщение
ошибки с красной подсветкой, включая стек вызовов.console.warn() — отображает
предупреждения, которые не останавливают выполнение.console.log() — полезно для
промежуточной диагностики значений переменных.Использование этих методов совместно с DevTools позволяет выявить причину ошибки, проверить состояние переменных и локализовать проблему в коде.
eval или динамической
генерации функций.try...catch
и возвращать fallback ответы.Эффективная работа с ошибками времени выполнения напрямую влияет на стабильность приложения и качество пользовательского опыта, особенно в контексте использования service worker и Sw-precache.