The roadmap content is available in Russian only.

Roadmap for learn.javascript.ru (Part 1)

Главы 1, 2

Сколько типов данных в JS?

Что возвращают и как работают операторы?

> >= >= < <= == === && || ! !!


Как работают сравнения на разных типах?

Сравнения между undefined, null, NaN

Почему switch не называется циклом?

Что такое функция?

Глава 3

Воспользоваться debugger и отладчиком Chrome

Добавить ошибку в код и найти ее при отладке

Воспользоваться debugger в IDE в node.js

Задачи по Git #1, #2

DL 2 недели на 2 задачи

Глава 4

Что такое this?

Как "потерять" this?

Как "не терять" this?

Чему равен this в свойствах объекта?

Чему равен this в геттерах/сеттерах объекта?

Чему равен this внутри функции-стрелки?

Как сделать, чтобы объект:

был равен определенному числу?

был равен определенной строке?

obj > 0 // true. Как это сделать?

String(obj < 0) + String(obj < 0) // "truefalse". Как это сделать?

Главы 5, 6

Как работают вызовы методов у примитивов?

Как можно классифицировать методы массивов?

Чем отличается Map от объекта?

Чем отличается WeakMap от Map?

Что такое замыкание?

На чем и когда замыкается функция?

Что такое рекурсия?

Как можно оптимизировать рекурсию?

Что такое синхронный и асинхронный код?

Задачи на методы массивов + рекурсию

Задача по Git #3

DL 2 недели на задачи

оптимизировать функцию getStringCount из задачи, чтобы результат кешировался в WeakMap

Глава 7

Чем отличается геттер от свойства?

Как можно классифицировать дескрипторы?

Какие дескрипторы можно использовать вместе?

Какие дескрипторы нельзя использовать вместе?

Можно ли использовать this в геттере?

Можно ли использовать this в свойстве?

Можно ли использовать this в дескрипторе геттера?

Написать софт на чайник на ООП

Или другую технику

Простое: Телевизор, Бритва и т.д.
(для разогрева)

Сложнее: чайник, увлажнитель, кулер
(setInterval, датчики)

О_о: пылесос, бойлер, мультиварка
(больше датчиков и асинхронщины)

Глава 8

Как осуществить прототипное наследование?

Как осуществить наследование свойства в this?

Как создать объект без прототипа?

Как изменить прототип у созданного объекта?

Как получить прототип у объекта/числа/строки/функции?

Реализовать forEach/map/reduce на прототипах

Реализовать bind/call/apply на прототипах

Глава 9

Что значит "синтаксический сахар"?

Классы это синтаксический сахар?
Сахар над чем? Привести аналогии по синтаксису

Какие есть виды полей в классах?

Какие поля пишутся в прототип, а какие в инстанс?

Можно ли обратиться к статическому полю из this?

Можно ли переопределить метод в дочернем классе?

Можно ли переопределить метод в инстансе класса?

Реализовать сериализатор абстрактного инстанса класса

Глава 10

Что будет с кодом ниже после throw?

Что будет с кодом второго setTimeout после throw в первом?

Что будет с кодом ниже, если код выше обернут в try..catch и делает throw?

Что технически возможно throw'ить?

Можно ли сделать блок try без catch?

Можно ли сделать блок try..finally без catch?

Зачем нужна обработка ошибок? Используется ли она на проде?

Глава 11

Что такое колбек?

Что такое промисы? Чем они отличаются от колбеков?

Зачем нужны промисы?

Являются ли аргументы then колбеками?

Является ли промис синтаксическим сахаром и над чем?

Метод then() возвращает новый промис?

Что будет, если на завершенный промис добавить .then()?

Что такое микро и макро задачи? Примеры

Что мы можем промисифицировать? Есть ли ограничения?

Выполнится ли then после catch, если промис над catch:
1. реджетится 2. ресолвится?

Выполнится ли then перед catch, если промис над then:
1. реджетится 2. ресолвится?

Реализовать класс MyPromise

Глава 12

Кто такое генераторы?

Зачем нужны генераторы?

Является ли async/await синтаксическим сахаром и над чем?

Что первично, промисы или async/await или они не соприкасаются?

Что первично, генераторы или async/await или они не соприкасаются?

Можно ли реализовать логику await на генераторах?

Реализовать await в виде функции, принимающей генератор

Главы 13, 14

Примените модули на практике:
 подключите файл как модуль и используйте в нем импорт
 динамически импортируйте другой модуль, и воспользуйтесь им

Примените Proxy на практике:
 создайте ловушку, которая делает доп. действия при записи и чтении
 создайте ловушку, которая пересчитывает полное имя при изменении фамилии или имени
 почитайте про фреймворк Vue и как реализована его реактивность в версиях 2 и 3

Примените eval на практике:
 выполните код в eval, взяв его из prompt в браузере

Как работает побитовое И, ИЛИ, НЕ?

Что делает с числом побитовое НЕ?