ОСНОВЫ JAVASCRIPT

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

0

Где живёт JavaScript

HTML — каркас страницы. JS — логика. Одно без другого не работает.

HTML — это скелет страницы. Текст, картинки, кнопки — всё это HTML. Но HTML статичный — он не умеет реагировать на действия. Нажал кнопку — ничего не произойдёт. JavaScript добавляет логику: «когда нажали кнопку — сделай вот это». JS-код подключается к HTML через тег <script> или отдельный файл. Браузер читает HTML сверху вниз, находит скрипт и выполняет его.

const counter = document.getElementById('click-counter');
const btn = document.getElementById('click-btn');
let clicks = 0;

btn.addEventListener('click', () => {
  clicks = clicks + 1;
  counter.textContent = clicks;
});

👆 кликай на элемент, чтобы узнать что он делает

const
Ключевое слово — создаёт переменную, которую нельзя перезаписать. Один раз присвоил значение — и всё.
counter
Имя переменной. Хранит ссылку на HTML-элемент, в который будем записывать число кликов.
document
Объект текущей страницы. Через него JS обращается к HTML — ищет элементы, читает содержимое.
getElementById
Метод — ищет на странице элемент по его id. Нашёл — возвращает объект элемента. Не нашёл — вернёт null.
'click-counter'
Аргумент — id элемента, который ищем. В HTML у этого элемента написано id="click-counter".
btn
Имя переменной. Хранит ссылку на кнопку. Дальше на неё повесим обработчик клика.
'click-btn'
id кнопки в HTML. Именно этот элемент найдёт getElementById.
let
Ключевое слово — создаёт переменную, которую можно менять. Используй, когда значение будет обновляться.
clicks
Имя переменной-счётчика. Хранит текущее количество кликов. Начинает с нуля, растёт при каждом нажатии.
0
Начальное значение счётчика. Число, не строка — без кавычек.
addEventListener
Метод — добавляет реакцию на событие. Два аргумента: какое событие ждать и что делать, когда оно случится.
'click'
Тип события — клик мышкой. Есть и другие: 'input' (ввод текста), 'mouseover' (наведение), 'keydown' (нажатие клавиши).
() => { }
Стрелочная функция — набор команд, который выполнится при каждом клике. () — нет параметров, => — «делает», { } — тело функции.
1
Число, на которое увеличиваем счётчик. clicks + 1 берёт текущее значение и прибавляет единицу.
textContent
Свойство элемента — текст внутри него. Присваиваем новое значение — пользователь видит обновлённое число.
🖱️
Кликов: 0

Замени текст в console.log на «Привет, Капибара!» и нажми Run.

Задание: первый скрипт
вывод
...
1

Переменные

Хранят данные: имя, возраст, счёт. Без них программа ничего не запоминает.

Переменная — это коробка с надписью. Внутри лежат данные: число, текст, список. Надпись на коробке — имя переменной. По имени ты обращаешься к данным.

Два ключевых слова: const и let. const — коробка запечатана. Положил данные — больше не заменишь. let — коробка открыта. Данные можно заменить на другие.

Когда что использовать? По умолчанию пиши const. Если значение реально будет меняться (счётчик, состояние) — let.

🔒
const
Константа. Присвоил — и всё.
const pi = 3.14 const name = "Капи"
Когда: имена, настройки, ID, конфиги
🔄
let
Переменная. Значение можно менять.
let score = 0 score = score + 1
Когда: счётчики, состояния, всё что обновляется
const name = "Капи";     // имя не изменится
let age = 3;              // возраст растёт

age = age + 1;

console.log(name);  // Капи
console.log(age);   // 4

👆 кликай на элемент, чтобы узнать что он делает

const
Создаёт переменную, которую нельзя перезаписать. Присвоил значение — всё, заменить на другое не получится.
name
Имя переменной. Хранит текст «Капи». Через const — значит имя не поменяется.
"Капи"
Строка — текст в кавычках. Двойные, одинарные — без разницы. Главное, чтобы открывающая и закрывающая совпадали.
let
Создаёт переменную, которую можно менять. Используй для всего, что обновляется: счётчики, возраст, статусы.
age
Имя переменной. Хранит число — возраст. Через let, потому что возраст будет расти.
3
Число. Без кавычек — значит тип number. Если бы было "3" в кавычках — это уже строка.
1
Число, которое прибавляем. age + 1 берёт текущее значение (3) и получает 4.
console
Встроенный объект — консоль разработчика. В ней видны ошибки и результаты вывода.
log
Метод console — выводит значение в консоль. То, что в скобках, появится в выводе.
правило

По умолчанию пиши const. Если значение реально меняется — let.

camelCase — стиль именования

В JS имена переменных и функций пишут слитно: первое слово с маленькой буквы, каждое следующее — с большой. capybaraName, isHungry, getElementById. Это называется camelCase — «горбатый регистр», потому что заглавные буквы торчат как горбы верблюда.

Когда видишь длинное слово типа addEventListener — разбей на части: add + Event + Listener = «добавь слушатель событий». Так читаешь любой код.

🦫

Капи // const

Возраст: 3 // let

В коде ниже перепутаны var, const и let. Имя капибары не меняется — какое ключевое слово подойдёт? Количество мандаринок будет расти — какое?

Задание: исправь ошибки
вывод
...
1.5

Типы данных

Строка, число, true/false — JS различает типы. От типа зависит, что можно делать с данными.

У каждого значения есть тип. Тип определяет, что с этим значением можно делать.

"Капи" — это строка (string). Текст в кавычках. Можно склеивать строки, искать символы, считать длину.

3 — это число (number). Целые и дробные. Можно складывать, вычитать, сравнивать.

true / false — это boolean. Логический тип. Всего два значения: да или нет. Используется в условиях: если true — делаем одно, если false — другое.

Важно: "3" (в кавычках) — это строка, а не число. Кавычки превращают что угодно в текст. typeof покажет тип любого значения.

📝
string
Текст в кавычках.
"Капи" 'привет' `шаблон ${x}`
Можно: склеить, найти длину, вставить переменную
🔢
number
Целые и дробные.
42 3.14 -7
Можно: складывать, вычитать, сравнивать
boolean
true или false. Вкл/выкл, да/нет.
true false
Результат сравнения: 5 > 3 → true
const name = "Капи";         // строка
const age = 3;              // число
const isHungry = true;      // boolean

typeof name     // "string"
typeof age      // "number"
typeof isHungry // "boolean"

👆 кликай на элемент, чтобы узнать что он делает

const
Создаёт переменную, которую нельзя перезаписать. Все три значения здесь не меняются — поэтому const.
name
Имя переменной. Хранит строку «Капи». typeof покажет "string".
"Капи"
Строка — текст в кавычках. Тип: string. Можно склеивать, искать длину, вставлять в шаблон.
age
Имя переменной. Хранит число 3. typeof покажет "number".
3
Число без кавычек — тип number. Если написать "3" в кавычках — будет строка, не число.
isHungry
Имя переменной. Стиль camelCase: is + Hungry. Хранит boolean-значение true.
true
Boolean — логический тип. Только два значения: true (да) и false (нет). Без кавычек — иначе станет строкой.
typeof
Оператор — показывает тип значения. Пишется перед переменной, возвращает строку: "string", "number", "boolean".
ловушка

"5" + 3 = "53", а не 8. Строка + число = склейка. Число + число = математика.

🧩 Перетащи значения в правильный тип

"Капи"
42
true
"привет"
3.14
false
string
number
boolean
2

Шаблонные строки

Способ вставлять переменные прямо в текст без склейки через +.

Когда нужно вставить переменную в текст, есть два способа. Старый: склейка через +. Неудобно — легко потерять пробел или кавычку. Новый: обратные кавычки ` и ${переменная} внутри. Читается как обычное предложение. ИИ генерирует так почти всегда.

Обратные кавычки — это не одинарные и не двойные. На клавиатуре — левый верхний угол, клавиша с тильдой ~ (на русской раскладке там Ё). Только в обратных кавычках работает ${}.

const name = "Капибара";
let score = 100;

// старый способ — склейка через +
console.log("Игрок " + name + " набрал " + score);

// новый — шаблонная строка
console.log(`Игрок ${name} набрал ${score} очков`);

👆 кликай на элемент, чтобы узнать что он делает

const
Создаёт неизменяемую переменную. Имя игрока не поменяется — поэтому const.
name
Имя переменной. Хранит строку «Капибара».
"Капибара"
Строка в двойных кавычках. Обычный текст.
let
Создаёт изменяемую переменную. Счёт будет расти — поэтому let.
score
Имя переменной. Хранит число — очки игрока.
100
Начальное количество очков. Число без кавычек — тип number.
console
Объект консоли разработчика. Через него выводим результаты.
log
Метод — выводит то, что в скобках, в консоль.
"Игрок " + name + " набрал " + score
Старый способ — склейка через +. Каждый кусок отдельно, пробелы внутри кавычек. Легко ошибиться.
` ` (обратные кавычки)
Обратные кавычки включают режим шаблона. Внутри можно вставлять переменные через ${}. Клавиша ~ / Ё.
${name}
Вставка переменной. JS заменит ${name} на значение — «Капибара». Работает только в обратных кавычках.
${score}
Ещё одна вставка. ${score} заменится на 100. Можно вставлять сколько угодно переменных.
🎮
Игрок Капибара набрал 100 очков

Перепиши склейку через + на шаблонную строку с обратными кавычками ` и ${}.

Задание: перепиши на шаблонную строку
вывод
...
3

Функции

Набор команд с именем. Один раз написал — вызываешь сколько угодно раз с разными данными.

Представь рецепт. Записал один раз «сварить борщ» — и каждый раз готовишь по нему, не вспоминая шаги заново. Функция работает так же: набор команд под одним именем. Вызвал по имени — команды выполнились.

У функции бывают параметры — пустые слоты для данных. Вызываешь функцию и передаёшь конкретные значения. Функция работает с ними и может вернуть результат через return.

Стрелочная запись: const feed = (food) => { ... } — то же самое, что function feed(food) { ... }, но короче. ИИ часто пишет именно так. => читается как «делает».

function feedCapybara(food, calories) {
  console.log(`Капибара съела ${food}`);
  return calories;
}

feedCapybara("Траву", 1);   // Капибара съела Траву
feedCapybara("Арбуз", 5);  // Капибара съела Арбуз

👆 кликай на элемент, чтобы узнать что он делает

function
Ключевое слово — создаёт функцию. Функция — набор команд с именем. Один раз написал — вызываешь сколько угодно.
feedCapybara
Имя функции. camelCase: feed + Capybara = «покорми капибару». По имени функцию вызывают.
food
Параметр — пустой слот для данных. При вызове сюда попадёт конкретное значение: "Траву", "Арбуз".
calories
Второй параметр. Хранит количество калорий. Это значение функция вернёт через return.
console
Объект консоли. Здесь используется внутри функции — вывод произойдёт при каждом вызове.
log
Метод — выводит значение в консоль.
`Капибара съела ${food}`
Шаблонная строка. ${food} заменится на значение параметра. При вызове с "Траву" получится «Капибара съела Траву».
return
Возвращает результат наружу. Код после return не выполняется. Без return функция вернёт undefined.
feedCapybara(...)
Вызов функции — имя + скобки с аргументами. Команды внутри функции выполнятся с этими данными.
"Траву"
Первый аргумент — попадёт в параметр food. Капибара съест именно это.
1
Второй аргумент — попадёт в параметр calories. Трава — 1 калория.
"Арбуз"
Другой аргумент при втором вызове. Та же функция — другие данные.
5
Арбуз — 5 калорий. return вернёт это число наружу.
стрелочная запись

ИИ часто пишет const feed = (food) => { ... }. Это то же самое, что function feed(food) { ... }, только короче. => читается как «делает».

🦫

Вес: 45 кг

Перепиши обычную функцию на стрелочную запись: const имя = (параметр) => { }.

Задание: перепиши на стрелочную
вывод
...
4

Массивы

Пронумерованный список значений. Нумерация с нуля.

Массив — это пронумерованный список. Как полка с ячейками: в каждой ячейке лежит что-то, и у каждой есть номер.

Нумерация начинается с нуля, не с единицы. Первый элемент — [0], второй — [1]. Это правило, к нему привыкаешь.

Зачем массивы? Хранить списки: товары в корзине, сообщения в чате, пользователей в таблице. Без массивов пришлось бы создавать отдельную переменную для каждого элемента.

let backpack = ["Мандаринка", "Яблоко"];

backpack.push("Трава");       // добавить в конец
console.log(backpack[0]);     // Мандаринка
console.log(backpack.length); // 3
backpack.pop();               // убрать последний

👆 кликай на элемент, чтобы узнать что он делает

let
Создаёт изменяемую переменную. let — потому что содержимое рюкзака будет меняться.
backpack
Имя переменной — «рюкзак». Хранит массив (список) предметов.
["Мандаринка", "Яблоко"]
Квадратные скобки создают массив. Элементы через запятую. Индекс 0 — «Мандаринка», индекс 1 — «Яблоко».
push
Метод массива — добавляет элемент в конец списка. После push в backpack три предмета.
"Трава"
Аргумент — что добавить. Строка «Трава» станет третьим элементом массива.
console
Объект консоли разработчика.
log
Метод — выводит значение в консоль.
backpack[0]
Обращение по индексу. [0] — первый элемент. Нумерация с нуля. Вернёт «Мандаринка».
length
Свойство массива — количество элементов. Это свойство, не метод — без скобок.
pop
Метод массива — убирает последний элемент и возвращает его. Массив стал короче на один.
🎒
🍊 Мандаринка

Предметов: 1

Добавь в массив "Вкусная трава" через .push(), затем выведи длину массива через .length.

Задание: рюкзак
вывод
...
5

Объекты

Набор свойств с именами. Как карточка персонажа: имя, роль, статус.

Объект — набор свойств с именами. Если массив — это полка с номерами, то объект — это анкета: имя, возраст, роль. У каждого свойства есть ключ (имя) и значение.

Обращаешься через точку: capybara.name — «у объекта capybara возьми свойство name».

Важный нюанс: const защищает переменную, не содержимое. const capybara = {...} значит, что capybara нельзя заменить на другой объект. Но свойства внутри менять можно. Коробка приклеена к полке, но вещи внутри перекладываются.

const capybara = {
  name: "Капи",
  role: "Пловец",
  isHungry: true,
  friends: ["Бара", "Макс"]
};

console.log(capybara.name);        // Капи
console.log(capybara.friends[0]); // Бара

capybara.isHungry = false;        // меняем свойство

👆 кликай на элемент, чтобы узнать что он делает

const
Создаёт неизменяемую переменную. Но у объекта const защищает саму переменную, не содержимое внутри.
capybara
Имя переменной. Хранит объект с данными о капибаре. Через точку обращаемся к свойствам.
{ }
Фигурные скобки создают объект. Внутри — пары «ключ: значение», разделённые запятыми.
name
Ключ (имя свойства). Слева от двоеточия. Обращаемся к нему: capybara.name.
"Капи"
Значение свойства name. Строка. Это то, что вернёт capybara.name.
role
Ещё один ключ. Хранит роль капибары.
"Пловец"
Значение свойства role. Строка.
isHungry
Ключ. camelCase: is + Hungry = «голодна ли». Хранит boolean — true или false.
true
Boolean-значение. Капибара голодна. Можно изменить на false — const разрешает менять свойства.
friends
Ключ. Значение — массив. Свойство объекта может хранить что угодно: строку, число, массив, другой объект.
["Бара", "Макс"]
Массив строк — список друзей. Вложен в объект как значение свойства friends.
console
Объект консоли разработчика.
log
Метод — выводит значение в консоль.
[0]
Индекс — первый элемент массива friends. Нумерация с нуля. Вернёт «Бара».
false
Новое значение свойства. Капибара поела — больше не голодна. const разрешает менять свойства объекта.
⚠️ const и объекты
const защищает коробку, не содержимое.
const capybara = {...}
→ нельзя: capybara = другойОбъект
→ можно: capybara.name = "Новое имя"
Коробка приклеена к полке (const). Вещи внутри можно перекладывать.
🦫

Капи

Пловец
● Голодна

Выведи любимую еду Бары. Подсказка: Бара — второй элемент массива (индекс 1), а еда лежит в свойстве favoriteFood.

Задание: семья капибар
вывод
...
6

Условия

if / else — программа проверяет данные и решает, что делать.

Программа принимает решения через if/else. Проверяет условие — если true, выполняет один код. Если false — другой.

=== — строгое сравнение. Всегда используй три знака равно. Двойное = = сравнивает нестрого: "5" = = 5 даёт true, что обычно не то, что нужно.

&& — логическое «И». Оба условия должны быть true. || — логическое «ИЛИ». Достаточно, чтобы хотя бы одно было true.

let mandarins = 0;

if (mandarins === 0) {
  console.log("Спит");
} else if (mandarins > 0 && mandarins < 4) {
  console.log("Кушает");
} else {
  console.log("Танцует");
}

👆 кликай на элемент, чтобы узнать что он делает

let
Создаёт изменяемую переменную. Количество мандаринок может меняться.
mandarins
Имя переменной — количество мандаринок. Участвует в условиях — от неё зависит, что сделает капибара.
0
Начальное значение. Число. Мандаринок пока нет.
if
Ключевое слово — проверяет условие в скобках. Если true — выполняет код в { }. Если false — переходит к следующей проверке.
===
Строгое сравнение. Проверяет и значение, и тип. Всегда используй три знака. Два (==) сравнивает нестрого.
console
Объект консоли разработчика.
log
Метод — выводит значение в консоль.
"Спит"
Текст, который выведется, если условие mandarins === 0 — true. Мандаринок ноль — капибара спит.
else if
Дополнительная проверка. Сработает, только если первый if не прошёл. Можно добавлять сколько угодно else if.
&&
Логическое «И». Оба условия должны быть true: больше нуля И меньше четырёх. Если хотя бы одно false — весь блок false.
"Кушает"
Выведется при 1–3 мандаринках. Капибара кушает.
else
Финальная ветка — выполнится, если ни один if и else if не сработал. «Всё остальное».
"Танцует"
4 и больше мандаринок — капибара танцует. Это ветка else — срабатывает, когда всё остальное не подошло.
= = = а не = =

Всегда = = =. Оператор = = сравнивает нестрого: "5" = = 5 даёт true. Если ИИ сгенерировал = = — исправляй на = = =.

😴
Спит

Мандаринок: 0

Капибара голодна, но еды нет — а код говорит «кушает». Найди логическую ошибку в условии и исправь.

Задание: найди логическую ошибку
вывод
...
7

Методы массивов

.filter(), .map(), .forEach() — три метода вместо циклов.

Когда в массиве 100 элементов, обрабатывать каждый вручную невозможно. Нужен способ пройтись по всему списку за одну команду. Для этого есть три метода — каждый делает своё.

.filter() — фильтр. Проходит по массиву и проверяет каждый элемент. Подходит — оставляет. Не подходит — выбрасывает. Результат — новый массив, только с нужными элементами.

.map() — преобразователь. Берёт каждый элемент, что-то с ним делает и кладёт результат в новый массив. Как конвейер: на вход — объекты, на выход — только имена.

.forEach() — просто проходит по списку и выполняет действие с каждым элементом. Ничего не возвращает. Подходит, когда нужно вывести или записать данные.

const capybaras = [
  { name: "Капи", weight: 45 },
  { name: "Бара", weight: 60 },
  { name: "Дон",  weight: 55 }
];

// filter — оставить только подходящих
const heavy = capybaras.filter(c => c.weight >= 50);

// map — преобразовать каждый элемент
const names = capybaras.map(c => c.name);

// forEach — пройти по списку
capybaras.forEach(c => {
  console.log(`${c.name}: ${c.weight} кг`);
});

👆 кликай на элемент, чтобы узнать что он делает

const
Создаёт неизменяемую переменную. Массив и результаты filter/map не перезаписываются.
capybaras
Массив объектов. Каждый элемент — капибара с именем и весом. Частый паттерн в реальных данных.
name
Ключ объекта — имя капибары. Строка.
weight
Ключ объекта — вес капибары в кг. Число.
heavy
Новый массив — результат filter. Содержит только капибар с весом 50+: Бара и Дон.
filter
Метод массива — проходит по каждому элементу. Если функция вернула true — элемент попадает в новый массив. Нет — отбрасывается.
c =>
Стрелочная функция. c — параметр, текущий элемент массива при обходе. => — «делает». Вызывается для каждого элемента.
c.weight >= 50
Условие фильтра. Если вес 50 и больше — true (оставить). Если меньше — false (убрать).
names
Новый массив — результат map. Только имена: ["Капи", "Бара", "Дон"].
map
Метод массива — преобразует каждый элемент. Возвращает новый массив той же длины, но с изменёнными значениями.
c.name
Из объекта берём только имя. Был объект {name, weight} — стала строка "Капи".
forEach
Метод массива — проходит по каждому элементу и выполняет действие. Ничего не возвращает. Для вывода, записи в DOM.
console
Объект консоли разработчика.
log
Метод — выводит значение в консоль.
`${c.name}: ${c.weight} кг`
Шаблонная строка. Для каждой капибары выведет «имя: вес кг». Обратные кавычки + ${} для вставки значений.

Замени пустой массив [] на вызов .filter(), который оставит только капибар с весом 50 кг и больше.

Задание: фильтрация
вывод
...
8

DOM и события

JS находит элементы HTML, меняет текст и реагирует на клики.

DOM — это HTML-страница глазами JavaScript. Каждый элемент (кнопка, заголовок, абзац) — это объект, к которому JS может обращаться.

document.getElementById('id') — находит элемент по id. .textContent — меняет текст. .addEventListener — вешает реакцию на действие (клик, ввод текста, наведение мыши).

Это основа любого интерактива на странице. Когда ИИ генерирует код для кнопок, форм, всплывающих окон — это всё DOM + события.

как читать эти длинные конструкции

Точка — это «у кого возьми что». Читай слева направо:

document.getElementById('id')

У document (страница) возьми метод getElementById (найди элемент по id) и передай в ('id') (скобки) конкретный id.

btn.addEventListener('click', () => { })

У btn (кнопка) вызови addEventListener (добавь слушателя). Первый аргумент — 'click' (какое событие). Второй — () => { } (что делать).

display.textContent = "Новый текст"

У display (элемент) возьми свойство textContent (текст внутри) и присвой = новое значение.

Правило: точка = «у кого». Скобки () = «выполни с этими данными». = «присвой». => = «делает».

const btn = document.getElementById('my-button');
const display = document.getElementById('result');

display.textContent = "Новый текст";

btn.addEventListener('click', () => {
  display.textContent = "Кнопка нажата";
});

👆 кликай на элемент, чтобы узнать что он делает

const
Создаёт неизменяемую переменную. Ссылка на элемент не будет перезаписываться.
btn
Имя переменной. Хранит ссылку на кнопку, найденную по id. Дальше на неё повесим обработчик.
document
Объект текущей страницы. Через него JS ищет и читает HTML-элементы.
getElementById
Метод — ищет элемент по id. Не нашёл — вернёт null. Найти элемент — первый шаг любого взаимодействия.
'my-button'
Аргумент — id кнопки в HTML. Должен совпадать с тем, что написано в HTML: id="my-button".
display
Имя переменной. Хранит ссылку на элемент, в который будем записывать текст.
'result'
id элемента для вывода текста. getElementById найдёт его на странице.
textContent
Свойство элемента — текст внутри него. Присвоил новое значение — текст на странице обновился.
"Новый текст"
Строка — новый текст, который появится внутри элемента display.
addEventListener
Метод — добавляет реакцию на событие. Первый аргумент — тип события, второй — что делать.
'click'
Тип события — клик мышкой. Другие: 'input' (ввод текста), 'mouseover' (наведение), 'keydown' (клавиша).
() => { }
Стрелочная функция — набор команд, который выполнится при каждом клике. () — нет параметров.
"Кнопка нажата"
Текст, который появится в элементе display после клика. Присваивается в textContent.
итог

Что ты теперь знаешь

Как JS подключается к HTML
Переменные: const (не меняется) и let (меняется)
Типы данных: строки, числа, boolean
Шаблонные строки через ` и ${}
Функции и стрелочная запись =>
Массивы — пронумерованные списки
Объекты — данные с именами (ключ: значение)
Условия: if/else, ===, &&, ||
Методы массивов: filter, map, forEach
DOM: находить элементы и реагировать на события

Ты не пишешь код — ты читаешь его. Теперь ты знаешь, куда смотреть и что просить исправить.