Курс по JavaScript
Оглавление курса: модули и шаги.
Старт
- Как запускать JavaScript в браузере Пошаговые способы запускать JavaScript в браузере через DevTools и Console, а также разбор типичных ошибок и чтение stack trace.
- Подключение script - где ставить, defer и порядок выполнения Разбор способов подключения script в HTML, влияние места вставки, атрибуты defer и async, а также порядок выполнения и частые ошибки.
- Переменные - let и const (почему так) Объяснение, что такое переменные в JavaScript, чем отличаются let и const, почему чаще выбирают const и как избегать типичных ошибок.
- Типы данных - string, number, boolean, null, undefined Базовые типы данных в JavaScript: строки, числа, логические значения, null и undefined. Проверка типа через typeof и типичные нюансы.
- Преобразование типов - Number, String, Boolean и NaN Явное и неявное преобразование типов в JavaScript: Number(), String(), Boolean(), разбор NaN и способы безопасной проверки данных.
- Строки - шаблонные строки и полезные операции Работа со строками в JavaScript: шаблонные строки, конкатенация, доступ к символам, поиск, замена, разбиение и полезные методы.
Логика и условия
- Условия if и else - базовая логика Условные конструкции if и else в JavaScript: как работают проверки, блоки кода, цепочки else if, сравнения и частые ошибки.
- Сравнения в JavaScript: === и ==, >, <, >=, <= Операторы сравнения: строгое и нестрогое равенство, сравнение чисел и строк, а также нюансы с NaN, null, undefined и объектами.
- Truthy и Falsy в JavaScript Как значения приводятся к true или false в условиях: список falsy, примеры с if, логическими операторами и частые нюансы.
- Логические операторы &&, ||, ! в JavaScript Как работают &&, || и !: short-circuit, порядок вычисления, возврат операндов (не только true/false) и типичные паттерны.
- Тернарный оператор ? : в JavaScript Как работает тернарный оператор: синтаксис, приоритет, вложенные тернарники, и когда лучше выбрать if/else.
- switch в JavaScript: когда он удобнее if Как работает switch: сравнение по ===, case/default, break, группировка кейсов и ситуации, где switch читается лучше if/else.
Циклы
- Цикл for в JavaScript: структура, шаг, границы Как устроен цикл for: инициализация, условие, шаг, работа с индексами и границами, а также частые ошибки в циклах.
- Циклы while и do...while в JavaScript Как работают while и do...while: проверка условия, минимум одна итерация в do...while, break/continue и типичные ошибки с бесконечными циклами.
- break и continue в JavaScript Как управлять выполнением циклов: break для остановки, continue для пропуска итерации, примеры для for/while и частые ошибки.
- Перебор строк и массивов в JavaScript Как перебирать строки и массивы: индексы, length, for/for...of, доступ к символам и элементам, и базовые приемы.
- Частые ошибки циклов в JavaScript Типичные ошибки при работе с циклами: бесконечные циклы, неверные границы, off-by-one, изменение коллекции во время перебора и ошибки с continue.
Функции
- Функции в JavaScript: зачем нужны и как работает return Базовые идеи функций: зачем они нужны, параметры и аргументы, возвращаемое значение через return, ранний выход и частые ошибки.
- Параметры и аргументы в JavaScript: значения по умолчанию Как передавать данные в функции: параметры и аргументы, missing arguments, значения по умолчанию, rest-параметры и аккуратные проверки.
- Function declaration vs function expression в JavaScript Два способа создать функцию: declaration и expression. Разница простыми словами: hoisting, где можно вызывать, и как выбирать подходящий вариант.
- Стрелочные функции в JavaScript: когда удобно Стрелочные функции: синтаксис, короткий return, удобство для колбэков и важные ограничения (this, arguments, new).
- Область видимости (scope) в JavaScript Как работает scope: глобальная, функциональная и блочная области видимости, lexical scope, shadowing и частые ошибки с var.
- Guard clauses: ранний выход из функции Как guard clauses упрощают код: ранние return, меньше вложенных if, обработка ошибок и проверка входных данных.
- Ошибки в функциях: undefined, NaN и неверные типы Частые ошибки при вызове и работе функций: undefined, NaN, неверный тип данных, и как сделать проверки, чтобы код был надежнее.
- Мини-правила читаемого кода: именование и маленькие функции Небольшие правила, которые делают код понятнее: хорошие имена, маленькие функции, ранний выход, минимум вложенности и аккуратные условия.
Массивы
- Массивы в JavaScript: что это, индексы, length База по массивам: что такое массив, как устроены индексы, свойство length, доступ к элементам и типичные ошибки с границами.
- Массивы: добавление и удаление через push/pop/shift/unshift Базовые методы изменения массива: push и pop для конца, shift и unshift для начала. Что возвращают методы и на что обратить внимание.
- slice и splice в JavaScript: копия vs изменение массива Два похожих метода массивов с разным смыслом: slice делает копию (не меняет массив), splice изменяет массив (удаляет/вставляет).
- Перебор массива: for, for...of, forEach Три способа перебора массива: классический for с индексом, for...of по значениям и forEach как метод. Отличия и когда что удобнее.
- Метод map в JavaScript: преобразование массива Как работает map: преобразование элементов в новый массив, функция-колбэк, неизменяемость исходного массива и частые ошибки.
- Метод filter в JavaScript: отбор элементов Как работает filter: отбор элементов по условию, новый массив, колбэк с boolean, примеры с числами и объектами и частые ошибки.
- find, some, every: поиск и проверки в массивах Методы для поиска и проверок: find возвращает элемент, some проверяет что есть хотя бы один, every проверяет что подходят все. Примеры и нюансы.
- includes и indexOf: проверка наличия в массиве Два способа проверить наличие элемента в массиве: includes возвращает boolean, indexOf возвращает индекс или -1. Примеры и нюансы с NaN.
- sort в JavaScript: как сортировать числа правильно Почему sort по умолчанию сортирует как строки и как правильно сортировать числа через compareFn. Примеры по возрастанию, убыванию и сортировка объектов.
- reduce в JavaScript: простые случаи (сумма и объект-счетчик) Метод reduce собирает массив в одно значение: сумма, произведение, максимум и объект-счетчик. Синтаксис, initialValue и частые ошибки.
Объекты и JSON
- Объекты в JavaScript: свойства, чтение и запись База по объектам: что такое объект, свойства и ключи, чтение и запись через точку и квадратные скобки, удаление свойств и частые ошибки.
- Вложенные объекты и безопасный доступ Как работать с вложенными объектами: чтение и запись по цепочке, типичные ошибки TypeError, проверки, optional chaining (?.) и nullish coalescing (??).
- Object.keys, Object.values, Object.entries Как получить ключи, значения и пары ключ-значение из объекта: Object.keys/values/entries, перебор через for...of и типичные нюансы.
- Деструктуризация в JavaScript: объект и массив Как удобно доставать значения из объектов и массивов: базовая деструктуризация, значения по умолчанию, переименование, вложенные структуры и частые ошибки.
- Spread и rest: копирование и сбор параметров Оператор ... в двух ролях: spread для копирования и объединения массивов/объектов и rest для сборки остатка в деструктуризации и параметрах функций.
- Мутации в JavaScript: почему сломалось само Почему изменения массива или объекта могут неожиданно влиять на другие переменные: ссылочные типы, общая ссылка, поверхностная копия и как избегать случайных мутаций.
- JSON.stringify и JSON.parse Как превращать данные в JSON-строку и обратно: JSON.stringify/parse, форматирование, ошибки парсинга, ограничения JSON и практичные примеры.
- Объекты в массивах: типовой формат данных Почему массив объектов - один из самых частых форматов данных: чтение и поиск, map/filter/reduce по полям, обновление элемента без мутации и частые ошибки.
- Типовые ошибки объектов и JSON Частые ошибки при работе с объектами и JSON: undefined и отсутствующие свойства, квадратные скобки, мутации, поверхностные копии, parse/stringify и ошибки формата.
DOM
- Что такое DOM и как JavaScript управляет страницей DOM - это объектная модель HTML-страницы. Как устроено дерево элементов, что такое document, как находить элементы и менять текст, атрибуты и классы.
- querySelector и querySelectorAll: поиск элементов Как находить элементы на странице через CSS-селекторы: querySelector/querySelectorAll, NodeList, перебор, поиск внутри контейнера и частые ошибки.
- textContent и innerHTML: разница и безопасность Как менять содержимое элементов: textContent vs innerHTML, когда нужен HTML, почему innerHTML может быть опасным и как делать безопаснее.
- Атрибуты, классы и dataset в DOM Как читать и менять атрибуты и классы элементов, что такое data-* и dataset, как правильно работать с булевыми атрибутами и типовые ошибки.
- Создание и вставка элементов: createElement и append Как создавать элементы в DOM через createElement, задавать текст и атрибуты, добавлять в документ через append/prepend, собирать фрагменты и избегать типовых ошибок.
- События в DOM: addEventListener и объект event Как работают события в браузере: addEventListener, обработчик, объект event, target/currentTarget, preventDefault, keydown и типовые ошибки.
- Формы в DOM: input, submit и preventDefault Как работать с формами в JavaScript: события input и submit, чтение значений, preventDefault, FormData, кнопки submit и типовые ошибки.
- Делегирование событий в DOM Как обрабатывать события на списках и динамических элементах через один обработчик: всплытие, event.target, closest и практичные примеры.
- localStorage: сохранить настройку или строку Как хранить простые данные в браузере через localStorage: setItem/getItem/removeItem, хранение строк, чисел и boolean, JSON для объектов и типовые ошибки.
- Как структурировать маленький DOM-код: функции и render Как держать DOM-код понятным без фреймворков: состояние, функции-обработчики, render, обновление UI и простой шаблон структуры файла.
Асинхронность и запросы
- Асинхронность в JavaScript: почему код выполняется не по порядку Простое объяснение асинхронности: что блокирует поток, зачем нужны callbacks и Promises, как работает очередь задач, setTimeout и типовые причины эффекта 'не по порядку'.
- Promise в JavaScript: then, catch и finally Как работать с Promise: цепочки then, обработка ошибок через catch, финальная логика через finally, возврат значений, проброс ошибок и типовые ловушки.
- async/await в JavaScript Как писать асинхронный код понятнее: что делает async, как работает await, обработка ошибок через try/catch, параллельные запросы и частые ошибки.
- try/catch в JavaScript: обработка ошибок Как ловить ошибки через try/catch, когда он работает и когда нет, throw, finally, собственные ошибки и обработка ошибок в async/await.
- fetch GET: запрос и разбор JSON Как делать GET-запросы через fetch, проверять статус ответа, разбирать JSON, обрабатывать ошибки и работать с query-параметрами.
- Ошибки fetch: статус, сеть и неправильный JSON Какие ошибки бывают при fetch: HTTP-статусы, сетевые сбои, aborted, CORS, ошибки парсинга JSON и как писать надежный шаблон обработки.
- Promise.all: параллельные запросы Как запускать несколько запросов параллельно через Promise.all: отличие от последовательных await, обработка ошибок, Promise.allSettled и типовые ошибки.
- Мини-кеширование в localStorage: идея и пример Как сделать простой кеш в localStorage: хранение JSON, метка времени, TTL, обновление по сети и обработка ошибок.
Структура проекта и отладка
- import/export: модули Как работает модульная система в JavaScript: export и import, default и именованные экспорты, пути и расширения, type="module", частые ошибки и полезные правила структуры.
- Как разложить код по файлам: data, logic, ui Простой подход к структуре маленького проекта: разделение на data, logic и ui, точка входа, зависимости между слоями и пример мини-проекта.
- Отладка: breakpoints, debugger, чтение ошибок Как находить ошибки в JavaScript: чтение сообщений в консоли, стек вызовов, breakpoints, оператор debugger, watch, пошаговое выполнение и типовые сценарии.
- Частые ошибки новичков: подборка примеров Подборка типовых ошибок в JavaScript: сравнения и приведение типов, ошибки условий и циклов, массивы и объекты, работа с DOM, async/await, import/export и чтение ошибок.
- 10 правил понятного JS-кода: чек-лист Короткий чек-лист из 10 правил, которые делают JavaScript-код читаемее: имена, функции, условия, структура, данные, побочные эффекты, ошибки и стиль.
- Что учить дальше: DOM глубже, TypeScript, фреймворк Куда двигаться после базы JavaScript: углубление в DOM и браузерные API, TypeScript, сборка и модули, тестирование, а затем выбор фреймворка. Понятные ориентиры и примеры.