1. JavaScript: основы языка и современный синтаксис (ES6+)
JavaScript: основы языка и современный синтаксис (ES6+)
JavaScript — основной язык веб-разработки: он работает в браузере (интерфейсы, события, сеть) и на сервере через Node.js (API, фоновые задачи, инструменты). В этом курсе мы будем использовать JavaScript как фундамент для React (клиент) и Node.js (сервер), поэтому важно уверенно понимать базовый синтаксис и ключевые возможности современного стандарта ES6+.
Полезные справочники, к которым стоит привыкнуть обращаться:
Как запускать JavaScript
Основные способы:
node file.js или интерактивный режим node.Режим строгой проверки:
"use strict" включает более строгие правила и ошибки там, где раньше были неявные допущения.Переменные: var, let, const и области видимости
В современном JavaScript почти всегда используются let и const.
| Ключевое слово | Можно переназначать | Область видимости | Поднимается (hoisting) | Когда использовать |
|---|---:|---|---|---|
| var | да | функция | да (инициализация как undefined) | по возможности избегать |
| let | да | блок | да (но действует temporal dead zone) | когда переменная меняется |
| const | нет | блок | да (но действует temporal dead zone) | по умолчанию |
Пример блочной области видимости:
Важный нюанс: const запрещает переназначение переменной, но не делает объект неизменяемым.
Про temporal dead zone (TDZ): переменная let или const считается существующей в блоке, но до строки объявления к ней нельзя обращаться.
Справка:
Типы данных и преобразования
В JavaScript есть примитивы и объекты.
Примитивные типы:
number (включая NaN, Infinity)stringbooleannullundefinedbigintsymbolОбъекты:
Map и Set и т.д.Проверка типа:
Приведение к логическому значению (часто важно в условиях):
false, 0, "", null, undefined, NaN== против ===
=== — строгое сравнение без приведения типов.== — сравнение с неявными преобразованиями (часто источник багов).Рекомендация: использовать === и !==, а == — только если вы уверенно понимаете правила приведения.
Справка:
Объекты, массивы и семантика ссылок
Примитивы копируются по значению, а объекты — по ссылке.
Копирование объекта:
{ ...obj }, Object.assign({}, obj)structuredClone(obj) (если доступно в окружении)!Иллюстрация различия копирования примитивов и передачи объектов по ссылке
Функции: объявления, выражения и стрелочные функции
Функции в JavaScript — значения: их можно присваивать переменным, передавать в аргументы и возвращать.
Function Declaration и Function Expression
Отличие, полезное на практике: объявления функций поднимаются целиком, и их можно вызывать до места объявления в коде (хотя стиль обычно рекомендует не злоупотреблять этим).
Стрелочные функции
Важные свойства стрелочных функций:
this (они берут this из внешнего контекста)arguments (используйте rest-параметры)Rest-параметры:
Деструктуризация и оператор ... (spread/rest)
Деструктуризация помогает компактно извлекать данные из объектов и массивов.
Значения по умолчанию:
... работает в двух режимах:
Шаблонные строки
Шаблонные строки (template literals) удобны для интерполяции и многострочных строк.
На практике в React и Node.js классы встречаются реже, чем функции и композиция, но синтаксис важно понимать: вы будете встречать его в библиотеках и существующих кодовых базах.
Справка:
Асинхронность: Promise и async/await
JavaScript часто работает с задачами, которые завершаются позже:
Promise
Promise — объект, который представляет результат асинхронной операции: будущий успешный результат или ошибку.
Справка:
async/await
async/await — синтаксический сахар над Promise, который делает асинхронный код похожим на синхронный.
Параллельный запуск нескольких операций:
!Схема, объясняющая почему обработчики Promise выполняются раньше setTimeout при прочих равных
Полезные современные возможности ES2020+
Опциональная цепочка ?. — безопасный доступ к вложенным полям:
Оператор объединения с nullish-значением ?? — значение по умолчанию только для null и undefined:
Отличие от ||: || считает 0 и пустую строку ложными и заменит их значением по умолчанию, что не всегда нужно.
Справка:
Встроенные методы массивов, Map и Set
Методы массивов помогают писать декларативный код:
map — преобразование элементовfilter — отбор по условиюreduce — свертка к одному значениюfind — поиск первого подходящегоMap удобен для словаря с любыми ключами, Set — для множества уникальных значений.
Справка:
Практические рекомендации перед React и Node.js
const по умолчанию, let — когда нужно переназначение.try/catch с await или .catch у Promise.В следующей части курса обычно логично перейти к работе с DOM, событиями и браузерным API, а затем — к инструментам разработки и основам React.