JavaScript — один из основных языков веб-разработки. Он управляет поведением страниц, реагирует на действия пользователя, работает с формами и сетевыми запросами, запускает интерактивные элементы и помогает получать информацию с сервера. В этом руководстве Вы пройдёте базовые конструкции языка и сразу проверите их в интерактивных песочницах.
Что Вы научитесь делать
За 20–30 минут Вы:
- запустите первый JavaScript-код;
- разберётесь с переменными, условиями и функциями;
- поработаете с массивами;
- поменяете HTML через JavaScript;
- отправите первый запрос к API.
Что понадобится: только браузер. Ничего устанавливать не нужно.
JavaScript и его задачи
JavaScript — язык программирования, который браузер умеет выполнять прямо на странице. HTML задаёт структуру документа, CSS отвечает за оформление, а JavaScript добавляет логику: обработку кликов, проверку формы, загрузку содержимого без перезагрузки страницы, работу с меню и другими интерактивными элементами.
Стандарт языка называется ECMAScript. Название JavaScript часто сокращают до JS. С языком Java он не связан, несмотря на похожее имя.
JavaScript применяют и вне браузера. Среда Node.js запускает JS на сервере. В этом учебнике основной упор сделан на браузерный JavaScript: код можно выполнить сразу и увидеть результат.
Как браузер выполняет JavaScript
Браузер получает HTML-документ, строит структуру страницы и запускает подключённые скрипты. JavaScript-движок читает код, проверяет синтаксис и выполняет инструкции. Скрипт может вычислять значения, создавать функции, обращаться к элементам страницы и реагировать на события.
💡 Важно
JavaScript чувствителен к регистру:
1 userNameи
1 username— две разные переменные.
Для небольшого эксперимента отдельная программа не нужна. Код можно запустить в консоли браузера или прямо в блоке ниже.
Консоль
Поменяйте
1 | Алексей |
на своё имя, нажмите «Запустить», затем нажмите «Проверить».
Меняйте строку
1 | const userName = 'Алексей'; |
. Остальной код оставьте без правок.
const userName = 'Мария';
const message = document.querySelector('#message');
message.textContent = `Привет, ${userName}! JavaScript работает.`;
console.log('Скрипт выполнен'); Что здесь происходит:
- 1const userName = 'Алексей';
создаёт переменную и записывает в неё строку;
- 1document.querySelector('#message')
находит HTML-элемент с
1id="message";
- 1textContent
записывает новый текст внутрь найденного элемента;
- 1console.log()
отправляет сообщение в консоль песочницы.
⚠ Частая ошибка
1 querySelector()вернёт
1 null, когда подходящий элемент не найден. Попытка обратиться к свойству такого значения вызовет ошибку.
Переменные и типы значений JavaScript
Переменная хранит значение, к которому программа обращается по имени. В современном JavaScript для объявления переменных чаще применяют
1 | const |
и
1 | let |
. Через
1 | const |
удобно объявлять ссылку, которую не планируется переназначать.
1 | let |
подходит для значения, которое будет меняться.
| Тип | Пример | Что хранит | ||||||
|---|---|---|---|---|---|---|---|---|
|
| текст | ||||||
|
| число | ||||||
|
/
| логическое значение | ||||||
|
| значение ещё не задано | ||||||
|
| значение намеренно отсутствует | ||||||
|
| набор свойств |
Можно пока пропустить
1 BigIntи
1 Symbolтоже относятся к типам JavaScript, но на старте они не нужны для большинства учебных задач. К ним удобнее вернуться после базовых конструкций языка.
Консоль
Поставьте начальное значение
1 | lessonsCompleted |
равным
1 | 4 |
. После запуска на странице должно появиться число
1 | 5 |
.
Найдите строку
1 | let lessonsCompleted = 0; |
и поменяйте одно число.
const language = 'JavaScript';
let lessonsCompleted = 4;
lessonsCompleted = lessonsCompleted + 1;
document.querySelector('#variableResult').textContent =
`${language}: выполнено уроков — ${lessonsCompleted}`; Строка
1 | let lessonsCompleted = 0; |
создаёт переменную со значением
1 | 0 |
. Следующая строка берёт текущее число, прибавляет единицу и записывает результат обратно.
1 | const language |
не переназначается, поэтому для него выбран
1 | const |
.
Условия if и else
Условие позволяет выбрать одну из веток программы. Конструкция
1 | if |
запускает блок кода при истинном выражении.
1 | else |
задаёт ветку для случая, когда проверка дала
1 | false |
.
Консоль
Поменяйте возраст так, чтобы программа вывела «Доступ разрешён».
Условие проверяет, больше или равно значение
1 | 18 |
.
const age = 18;
const result = document.querySelector('#accessResult');
if (age >= 18) {
result.textContent = 'Доступ разрешён';
} else {
result.textContent = 'Доступ закрыт';
} Разберём код по строкам.
1 | age |
хранит возраст. Выражение
1 | age >= 18 |
возвращает
1 | true |
или
1 | false |
. При
1 | true |
выполняется код внутри
1 | if |
. При
1 | false |
запускается блок
1 | else |
.
Циклы for и while
Цикл повторяет один участок программы несколько раз.
1 | for |
удобен, когда счётчик меняется по понятному правилу.
1 | while |
продолжает работу, пока его условие остаётся истинным.
Консоль
Сейчас программа выводит числа от 1 до 5. Поменяйте цикл так, чтобы он вывел числа от 1 до 10.
Посмотрите на условие
1 | number <= 5 |
.
let output = '';
for (let number = 1; number <= 10; number++) {
output += number + '\n';
}
document.querySelector('#loopResult').textContent = output; В заголовке
1 | for |
находятся три части.
1 | let number = 1 |
создаёт счётчик.
1 | number <= 5 |
разрешает очередной проход цикла.
1 | number++ |
прибавляет единицу после прохода.
Функции: как не повторять один код
Функция объединяет набор инструкций под одним именем. Ей можно передать аргументы, выполнить вычисление и вернуть результат через
1 | return |
. Такой подход помогает делить программу на небольшие части.
Консоль
Поменяйте количество товара с
1 | 3 |
на
1 | 4 |
. Результат должен стать равен
1 | 3000 |
.
Количество передаётся функции вторым аргументом в строке
1 | calculateTotal(750, 3) |
.
function calculateTotal(price, quantity) {
return price * quantity;
}
const total = calculateTotal(750, 4);
document.querySelector('#totalResult').textContent = total; Что здесь происходит:
- 1calculateTotal
— имя функции;
- 1price
и
1quantity— параметры функции;
- 1750
— первый аргумент, он попадает в
1price;
- 13
— второй аргумент, он попадает в
1quantity;
- 1return
возвращает результат умножения;
- 1total
получает возвращённое значение.
Массивы и методы map, filter, reduce
Массив хранит упорядоченный набор значений. Элементы получают числовые индексы, отсчёт начинается с нуля. Размер массива JavaScript можно менять:
1 | push() |
добавляет элемент в конец, а
1 | pop() |
удаляет последний.
Консоль
Добавьте в массив строку
1 | TypeScript |
. После запуска она должна появиться в результате.
Добавить элемент в конец можно ещё одним вызовом
1 | languages.push(...) |
.
const languages = ['JavaScript', 'Python', 'PHP'];
languages.push('C++');
languages.push('TypeScript');
document.querySelector('#arrayResult').textContent = languages.join(', '); Для массивов есть методы, которые часто заменяют ручные циклы.
1 | map() |
создаёт новый массив после преобразования элементов.
1 | filter() |
оставляет элементы, прошедшие проверку.
1 | reduce() |
сворачивает набор значений в один результат. Эти методы удобнее разбирать после базового цикла
1 | for |
.
Объекты JavaScript
Объект хранит пары «ключ — значение». Такой формат подходит для сущностей с именованными свойствами: пользователя, товара, настройки или записи. К свойству можно обратиться через точку или квадратные скобки.
1
2
3
4
5
6
7 const user = {
name: 'Анна',
role: 'developer',
experience: 2
};
console.log(user.name); // Анна
Здесь
1 | user |
хранит объект, а
1 | name |
,
1 | role |
и
1 | experience |
являются его свойствами. Запись
1 | user.name |
читает значение свойства
1 | name |
.
DOM: связь JavaScript с HTML
DOM (Document Object Model) — программное представление HTML-документа в виде дерева объектов. Через DOM JavaScript находит элементы страницы, меняет текст и атрибуты, создаёт новые узлы и удаляет старые. Событие сообщает скрипту о действии пользователя: клике, вводе текста, отправке формы или нажатии клавиши.
Консоль
Поменяйте код так, чтобы один клик увеличивал счётчик сразу на
1 | 2 |
.
Найдите строку
1 | clicks += 1; |
.
let clicks = 0;
const button = document.querySelector('#counterButton');
const counter = document.querySelector('#counter');
button.addEventListener('click', () => {
clicks += 2;
counter.textContent = clicks;
}); ⚠ Частая ошибка
Обработчик события нужно передавать функции
1 addEventListener(), а не вызывать заранее. Запись
1 button.addEventListener('click', handler)передаёт функцию. Запись
1 handler()запускает её сразу.
Асинхронный код, Promise и запросы к API
Сетевой запрос требует времени, поэтому браузер не должен останавливать страницу на период ожидания ответа. Для таких задач JavaScript работает с асинхронными операциями. Объект
1 | Promise |
хранит будущий результат операции, а
1 | async/await |
помогает записывать асинхронный код последовательно и читаемо.
Консоль
Поменяйте номер записи в адресе с
1 | 1 |
на
1 | 2 |
и снова запустите код.
Нужная часть адреса находится в конце:
1 | /posts/1 |
.
async function loadPost() {
const response = await fetch('https://jsonplaceholder.typicode.com/posts/2');
if (!response.ok) {
throw new Error(`HTTP ${response.status}`);
}
const post = await response.json();
document.querySelector('#apiResult').textContent = post.title;
console.log(post);
}
loadPost().catch(error => {
document.querySelector('#apiResult').textContent = `Ошибка: ${error.message}`;
}); 1 | fetch() |
отправляет HTTP-запрос и возвращает Promise.
1 | await |
ждёт его завершения внутри функции с
1 | async |
. Свойство
1 | response.ok |
проверяет успешный HTTP-статус. Метод
1 | response.json() |
читает JSON-ответ и преобразует его в значение JavaScript.
💡 Важно
1 fetch()обычно не создаёт исключение из-за HTTP-статуса 404 или 500. Такие ответы нужно проверять через
1 response.okили
1 response.status.
Как учить JavaScript без пробелов в базе
Удобный порядок: синтаксис и переменные, условия, циклы, функции, массивы и объекты, DOM и события, затем Promise,
1 | async/await |
, Fetch API и модули. Не нужно заучивать методы наизусть. Полезнее писать небольшие программы и понимать, почему каждая строка даёт нужный результат.
Перед кодом полезно разбивать задачу на отдельные действия. Такой подход подробно разобран в материале про алгоритм программы. Когда базовые конструкции уже не вызывают трудностей, можно перейти к оценке скорости решений и асимптотическому анализу алгоритмов.
Для закрепления базы подойдут маленькие проекты: счётчик, калькулятор, список задач, форма с проверкой полей, фильтр карточек или загрузка информации из открытого API. Один законченный мини-проект обычно даёт больше понимания, чем длинная серия примеров, которые были просто перепечатаны.
Типичные ошибки начинающих
Частая ошибка — переход к React, Vue или другому фреймворку до свободной работы с функциями, массивами, объектами и асинхронным кодом. Фреймворк скрывает часть деталей, поэтому пробелы в базе проявляются позже при отладке. Ещё одна проблема — копирование готового кода без проверки каждой строки.
Следите за консолью браузера: синтаксические ошибки и исключения обычно сразу показывают описание проблемы и строку, где она возникла. Проверяйте небольшие фрагменты отдельно, называйте переменные по смыслу и не помещайте всю логику в одну функцию. Такой стиль упрощает поиск ошибок и дальнейшую работу с проектом.
Куда двигаться дальше
Дальше переходите к отдельным темам JavaScript и отрабатывайте каждую на коде. Ближайший полезный набор — переменные, типы, функции, массивы, DOM, события, Promise,
1 | async/await |
и Fetch API. Эти темы покрывают базу, которая нужна для большинства браузерных проектов.
JavaScript проще осваивать через короткий цикл: прочитать правило, написать код, намеренно допустить ошибку, найти её и исправить. Интерактивные блоки в этом учебнике можно менять прямо на странице, поэтому работайте с ними как с небольшой рабочей средой. С какой задачей на JavaScript Вы хотите разобраться следующей?



