ДЖАВАСКРИПТИЗЕРЫ | КИРИЛЛ ПОЗДНЯКОВ
5.29K subscribers
347 photos
263 links
Меня зовут Кирилл и я Тех Лид. Если по-простому то я fullstack разработчик с большим опытом :)
Создатель и разработчик (реклама): @HelloMeanOfficial
Download Telegram
Упаковка и Распаковка (Boxing) в JS что это такое ?

Методы – это свойства объектов, в которые записаны функции. Если это так, тогда почему работает такой код: 'hexlet'.toUpperCase();

Из этого кода можно сделать ошибочный вывод что строка это тоже объект, но это не так. В JavaScript строки, логические значения, null и числа реализованы как примитивные значения, у них нет методов. С другой стороны, для каждого такого типа существует собственный конструктор, "упаковывающий" примитивный тип в объект

JavaScript автоматически упаковывает примитивные типы в соответствующие объекты, когда встречает вызовы методов на них (и затем автоматически распаковывает). То есть в действительности, все методы которые мы вызываем на строках, хранятся в прототипе конструктора String. То же самое касается и всех остальных типов

Интересно то, как происходит распаковка. Для этого JavaScript автоматически вызывает метод valueOf() у объекта:
👍8
Как мы можем использовать Symbol с практической точки зрения ?

Symbol.toPrimitive - Определяет свойство с функциональным значением, вызываемое для преобразования объекта в соответствующее примитивное значение. Полезен и относится к теме Упаковки и Распаковки

Symbol.iterator - Хорошо известный символ указывает итератор по умолчанию для объекта.

Symbol.search - Хорошо известный символ указывает метод, который возвращает индекс в строке, соответствующей регулярному выражению. Эта функция вызывается методом String.prototype.search
👍5
Что такое и как использовать Promise ?

Интерфейс Promise (промис) представляет собой обёртку для значения, неизвестного на момент создания промиса. Он позволяет обрабатывать результаты асинхронных операций так, как если бы они были синхронными: вместо конечного результата асинхронного метода возвращается своего рода обещание (дословный перевод слова "промис") получить результат в некоторый момент в будущем.

Promise может находиться в трёх состояниях: ожидание (pending), исполнено (fulfilled), отклонено (rejected)

Promise.all() - возвращает промис, который выполнится тогда, когда будут выполнены все промисы, переданные в виде перечисляемого аргумента, или отклонено любое из переданных промисов.
Promise.allSettled() - возвращает промис, который исполняется когда все полученные промисы завершены
Promise.race() - возвращает выполненный или отклонённый первый промис
Promise.any() - Как только один из промисов (Promise) выполнится успешно
👍7
Что такое генератор ?

Генератор - это функция способная хранить свое состояние, то есть способная останавливаться и заново запускаться

Для объявления генератора используется специальная синтаксическая конструкция: function*, которая называется «функция-генератор».

Основным методом генератора является next(). При вызове он запускает выполнение кода до ближайшей инструкции yield <значение> (значение может отсутствовать, в этом случае оно предполагается равным undefined). По достижении yield выполнение функции приостанавливается, а соответствующее значение – возвращается во внешний код:

Результатом метода next() всегда является объект с двумя свойствами: value, done
Методы:
Generator.prototype.next() - Возвращает значение, полученное выражением yield
Generator.prototype.return() - Возвращает заданное значение и заканчивает генератор
Generator.prototype.throw() - Выдаёт ошибку генератора.
👍6
Что такое каррирование ?

Каррирование – продвинутая техника для работы с функциями. Она используется не только в JavaScript, но и в других языках.
Каррирование – это трансформация функций таким образом, чтобы они принимали аргументы не как f(a, b, c), а как f(a)(b)(c).
Каррирование не вызывает функцию. Оно просто трансформирует её.

Каррирование либо уменьшение арности функции
👍4
Стрелочные функции и контекст

Контекст - это объект в контексте которого выполняется функция.
Стрелочная функция в отличии от обычной не имеет своего контекста, она берет контекст на уровень выше.

Контекст можно привязать методами: call, apply, bind
Привязка контекста не работает со стрелочными функциями
👍3🤔1
Что такое IIFE и как эти пользоваться ?

Immediately-invoked function expressions (аббревиатура IIFE), что означает функцию, запускаемую сразу после объявления.

Это не то, что мы должны использовать сегодня, но, так как вы можете встретить это в старых скриптах, полезно понимать принцип работы.

Здесь создаётся и немедленно вызывается Function Expression. Так что код выполняется сразу же и у него есть свои локальные переменные.
👍4
Давайте знакомиться !
Меня зовут Кирилл.

Я автор этого канала и создатель бота @interviewITBot

Являюсь Senior Full-Stack разработчиком.
Сейчас работаю Тех Лидом в одной из Питерских компаний.

Вот мой тик ток где я создаю свой React за 15 секунд
👍4
Как задать контекст функции ?

Это можно сделать тремя способами: call, apply, bind
call - первым принимает объект для задачи контекста, вторым принимает список аргументов функции ( функция будет сразу вызвана )
apply - первым принимает объект для задачи контекста, вторым принимает массив из аргументов функции ( функция будет сразу вызвана )
bind - первым принимает объект для задачи контекста, вторым принимает список аргументов функции ( будет создана новая функция и передана в переменную )

bind жестко привязывает контекст, то есть второй bind не отработает
В стрелочную функцию нельзя задать контекст
👍6
Всем привет ! На связи создатель этого канала и бота @interviewITBot.

Есть идея сделать курс для ребят уровня: Стажер, Junior, Middle, потому что сейчас нет четкого объяснения и растолковывая по многим вопросом.

Так как я провел более 50 собеседований, большинство не понимает одни и те же темы

К примеру: протипирование, отрисовка страницы, поток документа, контекст, цикл событий,чистый код, CRP и так далее ( тем реально много, так как в большинстве уроках поверхностная муть )

Касаемо фронтенда: Виртуальный Дом, Fiber, оптимизация, стейт менеджеры, хуки, почему опытные разрабы не любят функциональные компоненты
( и еще куча всего, что не говорят )

Никто не говорит про typescript, хотя по факту это уже стандарт
Даже у человека знающего ts, спросив что такое перегрузка функции или зачем тип unknown,то он будет непонимать о чем идет речь

По бэку банальный вопрос как работает нода всех ввергает в шок.

Все полученные деньги, будут вложены в этот канал и бота собеседника.

После курса ребята Стажеры и Junior-ы, могут называться мидалми. А Мидлы, будут еще крепче

Сейчас создам голосование, чтобы понимать будет ли такое интересно
Минимальное количество людей: 10
👍3
Возьмешь курс ?
Anonymous Poll
67%
Да
33%
Нет
👍1
Какие типы есть в TypeScript ?

TypeScript - выделяют два определения: 1) Это строго типизированный язык, компилирующийся в JavaScript. 2) TypeScript это надстройка над JavaScript, которая привносит типы и так далее.

Какие в TypeScript есть типы данных: boolean ( логическое значение true или false ), number ( числовое значение ), string ( строки ), Array ( массивы ), кортежи ( неизменяемый массив ), Enum ( перечисления ), Any ( произвольный тип ), Symbol, null и undefined (соответствуют значениям null и undefined в javascript ), Never ( также представляет отсутствие значения и используется в качестве возвращаемого типа функций, которые генерируют или возвращают ошибку ), Void ( не возвращающий ничего из функции ), Unknown ( тип который неизвестен, тип который должен быть переопределен )
👍3
Методы массива (map, reduce, forEach, filter, find, some) ?

map - создаёт новый массив с результатом вызова указанной функции для каждого элемента массива.
reduce - применяет функцию reducer к каждому элементу массива (слева-направо), возвращая одно результирующее значение.
forEach - выполняет указанную функцию один раз для каждого элемента в массиве
filter - создаёт новый массив со всеми элементами, прошедшими проверку, задаваемую в передаваемой функции.
find - возвращает значение первого найденного в массиве элемента, которое удовлетворяет условию переданному в callback функции.
some - проверяет, удовлетворяет ли какой-либо элемент массива условию, заданному в передаваемой функции
👍11
На связи создатель канала

Увидел заинтересованность в курсе, создал отдельный канал где будет вся информация (сколько стоит, что будет и тд. )

Переходи за информацией сюда https://t.me/+ArAQp_pk6QYxZWIy
👍1
Какие значения falsy и что это такое ?

Ложноподобное (falsy) значение — значение, которое становится false в булевом контексте.
JavaScript использует преобразование типов, чтобы привести значение к булевому типу, там, где это требуется (например, в условных конструкциях и циклах.

Данные которые будут преобразованы в false: false, 0 (Ноль Number (к нему также относятся 0.0, 0x0 и т.д.)), -0 (Отрицательный ноль типа Number), 0n (Ноль типа BigInt (также 0x0n). Обратите внимание, что не может быть негативного нуля типа BigInt — отрицательный 0n равняется 0n.), "", '', `` (Значение, содержащее пустую строку .), null , undefined, NaN

Ссылочные типы данных всегда true, так как они создают ссылку на себя
👍4🔥1
Лучший фреймворк/библиотека для frontend ?
Anonymous Poll
79%
React
10%
Vue
8%
Angular
1%
Solid
2%
Svelte
👍4
Что такое Reflect ?

Reflect – встроенный объект, упрощающий создание прокси.

Ранее мы говорили о том, что внутренние методы, такие как [[Get]], [[Set]] и другие, существуют только в спецификации, что к ним нельзя обратиться напрямую.

Объект Reflect делает это возможным. Его методы – минимальные обёртки вокруг внутренних методов.

В частности, Reflect позволяет вызвать операторы (new, delete…) как функции (Reflect.construct, Reflect.deleteProperty, …). Это интересная возможность, но здесь нам важно другое.

Для каждого внутреннего метода, перехватываемого Proxy, есть соответствующий метод в Reflect, который имеет такое же имя и те же аргументы, что и у ловушки Proxy.

Поэтому мы можем использовать Reflect, чтобы перенаправить операцию на исходный объект.
👍2
Как написать свой Декоратор в TypeScript ?

Декораторы являются инструментом декларативного программирования, они позволяют добавить к классам и их членам метаданные и тем самым изменить их поведение без изменения их кода.

На текущий момент декораторы являются экпериментальной функциональностью языка TypeScript, поэтому при компиляции следует указывать параметр experimentalDecorators. Например, через файл tsconfig.json

В TypeScript есть декораторы: классов, методов, аксессоров, аттрибутов, параметров
👍1
Вам интересна тема TypeScript ?
Anonymous Poll
95%
Да
5%
Нет