JavaScript Error: причины ошибок, примеры и как быстро исправить
JavaScript error - это сигнал браузера о том, что что-то пошло не так в коде. Такая ошибка может полностью заблокировать работу сайта, сломать форму или скрыть нужный элемент. Появляется js error по разным причинам: опечатка в переменной, обращение к несуществующему объекту, синтаксическая ошибка или необработанный промис. Хорошая новость: большинство из них легко воспроизвести, найти и исправить.
В этой статье разберём самые частые ошибки JavaScript, покажем реальные примеры кода, объясним причины и дадим конкретные способы решения - как для новичков, так и для опытных разработчиков.
ReferenceError: переменная не существует
Причина
ReferenceError возникает, когда код обращается к переменной, которая не была объявлена или недоступна в текущей области видимости.
Пример
console.log(userName); // ReferenceError: userName is not definedИли классика с let и const - попытка обратиться к переменной до её объявления:
console.log(count); // ReferenceError: Cannot access 'count' before initialization
let count = 5;Как исправить
Убедитесь, что переменная объявлена перед использованием. Проверьте scope - переменная, объявленная внутри функции, недоступна снаружи. Если используете модули, убедитесь, что переменная экспортируется и импортируется корректно.
Как избежать
Используйте let и const вместо var . Включите линтер (ESLint) - он подсветит необъявленные переменные ещё до запуска кода.
TypeError: неправильный тип данных
Причина
TypeError появляется, когда вы пытаетесь выполнить операцию над значением неподходящего типа: например, вызвать как функцию то, что функцией не является, или обратиться к методу null.
Пример
const user = null;
console.log(user.name); // TypeError: Cannot read properties of null (reading 'name')Или:
const num = 42;
num(); // TypeError: num is not a functionКак исправить
Перед обращением к свойствам объекта проверяйте, что он не null и не undefined:
if (user && user.name) {
console.log(user.name);
}
// Или через опциональную цепочку (ES2020+):
console.log(user?.name);Как избежать
Используйте TypeScript или JSDoc-аннотации - они помогут отловить несоответствие типов ещё на этапе разработки. Всегда инициализируйте объекты перед использованием.
Cannot read properties of undefined
Причина
Это частный случай TypeError - самая распространённая javascript console error. Происходит, когда вы пытаетесь прочитать свойство у undefined.
Пример
const response = {}; // объект без поля data
console.log(response.data.items);
// TypeError: Cannot read properties of undefined (reading 'items')Как исправить
const items = response?.data?.items ?? [];
console.log(items);Опциональная цепочка (?.) не выбросит ошибку, а вернёт undefined. Оператор ?? задаст значение по умолчанию.
Как избежать
Никогда не предполагайте, что вложенные объекты существуют - всегда проверяйте их наличие, особенно при работе с API-ответами.
SyntaxError: синтаксическая ошибка
Причина
SyntaxError - это ошибка, которую JavaScript обнаруживает ещё до выполнения кода. Пропущенная скобка, лишняя запятая, неправильная структура - и скрипт не запустится вообще.
Пример
function greet( { // SyntaxError: Unexpected token '{'
return "Hello";
}Или:
const obj = { name: "Alex", age: 30, }; // trailing comma - в старых браузерах SyntaxErrorКак исправить
Смотрите на строку и колонку в сообщении об ошибке. Откройте DevTools → Console, там будет точный адрес проблемы. Чаще всего ошибка находится на строку выше указанной - парсер «спотыкается» уже после неправильного токена.
Как избежать
Используйте редактор с подсветкой синтаксиса (VS Code) и форматтер Prettier. Они моментально покажут незакрытые скобки и лишние символы.
Uncaught Promise Error: необработанный промис
Причина
Uncaught JavaScript Error в промисах происходит, когда асинхронный код завершается с ошибкой, но .catch() или try/catch не предусмотрен.
Пример
async function fetchData() {
const res = await fetch("https://api.example.com/data");
// Если сервер недоступен - Uncaught (in promise) TypeError: Failed to fetch
const data = await res.json();
return data;
}
fetchData(); // нет .catch() - ошибка выбросится в консольКак исправить
async function fetchData() {
try {
const res = await fetch("https://api.example.com/data");
if (!res.ok) throw new Error(`HTTP error: ${res.status}`);
return await res.json();
} catch (err) {
console.error("Fetch failed:", err);
// здесь можно показать уведомление пользователю
}
}Как избежать
Обрабатывайте ошибки в каждом async-функции. Установите глобальный обработчик как запасной вариант:
window.addEventListener("unhandledrejection", (event) => {
console.error("Unhandled promise rejection:", event.reason);
});Unexpected token: неожиданный символ
Причина
Браузер встречает символ, которого не ожидал в данном месте кода. Часто возникает при вставке JSON, шаблонных литералов или кода из другой кодировки.
Пример
const data = {name: 'Alex', age: 30}; // если кавычки - "умные" типографские, это SyntaxErrorИли при попытке использовать import в скрипте без type="module":
import { helper } from "./utils.js";
// SyntaxError: Cannot use import statement outside a moduleКак исправить
Проверьте кодировку файла (всегда UTF-8). Замените типографские кавычки на обычные. Для ES-модулей добавьте атрибут в HTML: <script type="module" src="app.js"></script>.
JavaScript Error в браузере Chrome и Firefox
Браузеры сообщают об ошибках по-разному, но DevTools устроены похоже. В Chrome:
Откройте F12 → вкладка Console
Красные записи - это js errors
Клик по ссылке справа (например,
app.js:42) откроет источник прямо на проблемной строке
В Firefox DevTools работает аналогично, но есть дополнительная вкладка Debugger с удобным визуализатором стека вызовов.
Важно: некоторые расширения браузера сами генерируют javascript console error - проверьте сайт в режиме инкогнито, чтобы исключить их влияние.
JavaScript Error в WordPress
На сайтах под управлением WordPress js error чаще всего возникает из-за конфликта плагинов или неправильного подключения скриптов.
Типичная причина: два плагина подключают разные версии jQuery, и одна из них перезаписывает глобальный объект $. Результат - $ is not a function или jQuery is not defined.
Чтобы диагностировать:
Откройте консоль DevTools на проблемной странице.
Деактивируйте плагины по одному, пока ошибка не исчезнет.
Убедитесь, что скрипты подключаются через
wp_enqueue_script(), а не вставляются напрямую в шаблон.
Отладка JavaScript: DevTools, Console и Breakpoints
Умение пользоваться инструментами отладки - это половина успеха в работе с ошибками JavaScript.
Console
console.log() - базовый инструмент, но далеко не единственный. console.error() выводит ошибку с трассировкой стека. console.table() удобен для массивов объектов. console.group() позволяет группировать связанные записи.
Breakpoints
Точки останова позволяют «заморозить» выполнение кода в нужный момент и изучить состояние переменных. В Chrome DevTools:
Откройте вкладку Sources
Кликните на номер строки - появится синяя метка
Перезагрузите страницу - код остановится на этой строке
Можно также поставить debugger; прямо в коде:
function processUser(user) {
debugger; // браузер остановится здесь
return user.name.toUpperCase();
}Stack Trace
Stack trace (трассировка стека) - это список функций, которые привели к ошибке. Читайте его снизу вверх: нижняя строка - точка входа, верхняя - место, где произошла ошибка.
Source Maps
Если ваш код минифицирован или собран через Webpack/Vite, в DevTools вы увидите нечитаемый bundle. Source maps решают эту проблему - они связывают минифицированный код с исходным. В Webpack включите devtool: "source-map" в конфигурации.
FAQ
Почему появляется JavaScript error? Ошибка JavaScript возникает, когда браузер не может выполнить участок кода. Причины - синтаксические опечатки, обращение к несуществующим объектам, сетевые проблемы, конфликты скриптов или ошибки в логике программы.
Как проверить ошибки JavaScript? Откройте DevTools в браузере (F12 или Ctrl+Shift+I), перейдите на вкладку Console. Все js errors отображаются красным цветом с указанием файла и строки. Также можно использовать онлайн-инструменты: JSHint, ESLint, browser-based playgrounds вроде CodePen.
Почему сайт не работает из-за JS error? JavaScript блокирует выполнение при критической ошибке - весь код после неё не запустится. Если ошибка в основном скрипте, могут перестать работать кнопки, формы, анимации и динамический контент. Именно поэтому важно обрабатывать ошибки явно и не давать им «всплывать» в глобальный контекст.
Как быстро найти ошибку в JavaScript? Используйте Console DevTools для первичной диагностики. Если ошибка в асинхронном коде - проверьте вкладку Network. Для сложных случаев ставьте breakpoints и изучайте stack trace. Линтер ESLint поможет найти потенциальные проблемы ещё до запуска кода.
Заключение
Большинство javascript error fix сводятся к одному принципу: понять, в каком контексте возникла ошибка, и убедиться, что код работает с теми данными, которые он ожидает. ReferenceError говорит о том, что переменная недоступна. TypeError - что тип данных не тот. SyntaxError - что код написан с нарушением синтаксиса. Uncaught Promise - что асинхронная операция завершилась без обработки.
Не игнорируйте предупреждения в консоли: они часто появляются до того, как ошибка становится критической. Подключите ESLint к своему проекту, используйте TypeScript там, где это оправдано, и не забывайте про обработку ошибок в асинхронном коде - это избавит вас от большинства неприятных сюрпризов в продакшене.
Комментарии
Чтобы оставить комментарий, войдите в аккаунт.