Ошибки и отладка (Debugging)
Ошибки — неотъемлемая часть программирования. Даже опытные разработчики ежедневно сталкиваются с ошибками. Важно не бояться их, а уметь читать, понимать и исправлять. Этому уроку стоит уделить особое внимание.
🧘 Ошибки — это нормально
Прежде чем погрузиться в технику, давайте поговорим о психологии. Многие начинающие программисты пугаются ошибок. Увидел красную надпись в консоли — значит, что-то пошло не так, значит я плохой программист. Это неправильная установка.
На самом деле ошибки — это помощники. JavaScript не просто говорит «что-то не так» — он точно указывает, что именно пошло не так и где. Сообщение об ошибке — это не приговор, это подсказка.
«Программирование — это не написание кода без ошибок. Программирование — это процесс написания кода, получения ошибок и их исправления. Снова и снова.»
Даже у Линуса Торвальдса (создатель Linux), у команды Google, у разработчиков вашего браузера — у всех бывают баги. Это часть профессии. Разница между новичком и профи — не в отсутствии ошибок, а в скорости их нахождения и исправления.
🗂️ Три главных типа ошибок JavaScript
JavaScript имеет несколько типов встроенных ошибок. Три из них встречаются чаще всего — выучите их, и вы сразу будете понимать 90% сообщений в консоли.
Вы нарушили правила синтаксиса языка — написали код, который JavaScript не может понять. Как грамматическая ошибка в русском языке. Программа не запустится вообще — даже первая строка не выполнится.
// SyntaxError: Missing ) after argument list
console.log("Привет" // забыли закрывающую скобку
// SyntaxError: Unexpected token
let x = ; // нет значения после =
// SyntaxError: Unexpected end of input
function foo() { // не закрыли фигурную скобку
return 42;
Как исправить: читайте сообщение ошибки — там обычно написано, чего именно не хватает. Проверьте закрывающие скобки, кавычки, фигурные скобки.
Вы пытаетесь использовать переменную или функцию, которая не существует в данной области видимости. JavaScript ищет имя и не находит его.
// ReferenceError: userName is not defined
console.log(userName); // переменная не объявлена!
// Частая причина — опечатка в имени:
let username = "Иван";
console.log(userName); // u и U — разные! ReferenceError
// Использование переменной вне её области видимости:
function foo() {
let secret = 42;
}
console.log(secret); // ReferenceError — secret живёт только внутри foo
Как исправить: проверьте, объявлена ли переменная. Проверьте опечатки в имени (регистр, лишние/отсутствующие буквы). Проверьте область видимости.
Вы пытаетесь сделать операцию с данными неправильного типа: вызвать не-функцию, обратиться к свойству null/undefined, присвоить константе. Самая распространённая ошибка в JavaScript.
// TypeError: Cannot read properties of undefined (reading 'name')
let user = undefined;
console.log(user.name); // нельзя читать свойство у undefined!
// TypeError: null is not iterable
let list = null;
for (let item of list) {} // нельзя итерировать null
// TypeError: sayHello is not a function
let sayHello = "Привет";
sayHello(); // строка — не функция!
// TypeError: Assignment to constant variable.
const PI = 3.14;
PI = 3; // нельзя изменить const
Как исправить: прочитайте сообщение — там написано, что именно пошло не так. Проверьте тип значения (console.log(typeof x)). Частый случай: обращение к свойству null/undefined — добавьте проверку.
🔎 Как читать сообщение об ошибке
Сообщение об ошибке содержит всю нужную информацию. Нужно просто научиться его читать. Вот типичное сообщение в консоли браузера:
TypeError — тип ошибки. Сразу говорит о категории проблемы.
Cannot read properties of null (reading 'name') — что именно не так.
script.js:15:20 — файл, строка 15, столбец 20. Идите именно туда!
💡 Главное правило: читайте ошибку слева направо, сверху вниз. Первая строка — что случилось. Строки ниже (стек вызовов) — где именно произошло. Нажмите на ссылку с файлом и строкой — браузер откроет нужное место.
🖥️ Инструменты отладки: console
Объект console — ваш главный инструмент отладки. Это как разговор с программой: вы просите её рассказать, что в ней происходит.
console.log() — вывести значение
Самый используемый метод. Выводит значения в консоль браузера (открывается по F12 → Console). Можно передать несколько аргументов через запятую.
let x = 42;
let name = "Иван";
let arr = [1, 2, 3];
console.log(x); // 42
console.log("x =", x); // x = 42 (удобно — видно имя)
console.log(name, x); // Иван 42
console.log("массив:", arr); // массив: [1, 2, 3]
// Лайфхак — вывести переменную с именем через объект:
console.log({ x, name }); // {x: 42, name: "Иван"}
console.error() и console.warn()
Вывести сообщение об ошибке (красным) или предупреждение (оранжевым) в консоль. Удобно для логирования проблем в вашем коде.
console.error("Что-то пошло не так!"); // красная надпись в консоли
console.warn("Это устаревший метод"); // оранжевая надпись
// Пример использования:
function divide(a, b) {
if (b === 0) {
console.error("Ошибка: деление на ноль!");
return null;
}
return a / b;
}
console.table() — данные таблицей
Выводит массивы и объекты в виде красивой таблицы. Незаменим при работе с массивами объектов.
const users = [
{ name: "Иван", age: 25 },
{ name: "Мария", age: 30 },
{ name: "Алекс", age: 22 },
];
console.table(users);
// Выведет аккуратную таблицу с колонками name и age
console.time() / console.timeEnd()
Измерить время выполнения блока кода. Полезно при оптимизации.
console.time("мой таймер");
// ... какой-то код ...
for (let i = 0; i < 1000000; i++) {}
console.timeEnd("мой таймер");
// мой таймер: 2.345ms
🕵️ Стратегия отладки: как искать баги
Когда программа работает не так, как ожидается — есть проверенный алгоритм поиска проблемы:
Не пугайтесь красного текста — прочитайте его внимательно. Какой тип ошибки? Что написано в описании? На какую строку указывает?
Нажмите на ссылку с файлом и строкой в консоли. Посмотрите на эту строку и несколько строк вокруг неё.
Выведите значения переменных, которые используются на строке с ошибкой. Убедитесь, что они содержат то, что вы ожидаете.
Закомментируйте код, упростите функцию. Найдите минимальный пример, который воспроизводит ошибку. Чем меньше кода — тем проще найти проблему.
Скопируйте текст ошибки в Google или Stack Overflow. Скорее всего, кто-то уже сталкивался с такой же проблемой и нашёл решение. Это нормальная практика для всех разработчиков.
// Пример отладки с console.log:
function calculateTotal(items) {
console.log("items:", items); // проверяем что пришло
let total = 0;
for (let item of items) {
console.log("item:", item); // смотрим каждый элемент
console.log("item.price:", item.price); // проверяем конкретное свойство
total += item.price;
}
console.log("total:", total); // итоговое значение
return total;
}
// Если items вдруг null — TypeError появится на for..of
// Но перед этим console.log("items:", null) нам подскажет проблему!
💡 Практические советы начинающему
console.log отлично работает для отладки, но не забывайте убрать их из готового кода — лишние логи засоряют консоль пользователей.
Написали 5 строк — проверьте что работает. Не пишите 100 строк и потом ищите ошибку. Чем меньше шаг — тем легче найти проблему.
Не закрывайте консоль с испугом. Прочитайте: тип ошибки, описание, файл и строку. 80% случаев — ответ прямо в сообщении.
F12 → вкладка Sources → можно ставить breakpoints (точки остановки) и смотреть значения переменных в момент выполнения. Это мощнее чем console.log.
✅ Итоги урока
- Ошибки — нормальная часть программирования. Не бояться, а уметь читать и исправлять
- SyntaxError — нарушение синтаксиса (забытые скобки, кавычки, знаки)
- ReferenceError — обращение к несуществующей переменной или функции
- TypeError — операция над данными неправильного типа (самая частая ошибка)
- Сообщение об ошибке содержит: тип, описание и ссылку на файл/строку — читайте его полностью
console.log()— вывести значение в консоль. Главный инструмент отладкиconsole.error()/console.warn()— красные и оранжевые сообщенияconsole.table()— вывести массив/объект таблицей- Стратегия: прочитать ошибку → найти строку → добавить console.log → сузить проблему → погуглить
Поздравляем с завершением второго модуля! Вы освоили переменные, типы данных, строки, числа, преобразования и отладку — это серьёзный фундамент. Следующий модуль — управляющие конструкции: условия и циклы. 🚀
Тест по уроку: Ошибки и отладка
6 вопросов