Frontend Developer – Telegram
Frontend Developer
193 subscribers
18 photos
2 videos
67 links
Пост-знакомство — https://news.1rj.ru/str/frontenddevelopernews/3

По всем вопросам — @mobiledeveloper_bot
Download Telegram
🕰 How well do you know JavaScript's Date class?

Смотрите, какой смешной quiz я нашла про объект Date в JS — https://jsdate.wtf/ 🤯

Всего 28 вопросов — и это нужно иметь какую фантазию, чтобы придумать столько странностей? 😂

Советую пробежаться:
— чтобы посмеяться 😂
расслабиться 🧘‍♀️ (хотя не знаю даже 😂)
— и, возможно, узнать что-то новое 💡

📌 Фишка: после каждого вопроса есть объяснение, почему ответ именно такой — так что это не просто развлечение, но и прокачка 🧠
🧙‍♀️ Little Red Riding Hood's Quest

Как-то я уже делилась сайтом, который стал Site of the Day на Awwwards 🏆
И вот — нашла ещё один очень клёвый проект! Зацените 👉
🔗 https://ai-quest.lusion.co/

Этот сайт тоже получил Site of the Day — 5 июля 2023 года
🔗 https://www.awwwards.com/sites/little-red-riding-hoods-quest

Это не просто сайт, а настоящий AI-powered мини-квест с потрясающей визуалкой, озвучкой и атмосферой.
🖼 Иллюстрации сгенерированы с помощью MidJourney + StableDiffusion
🗣 Озвучка — через ElevenLabs
💬 Сценарий — с помощью ChatGPT

Очень советую прогуляться по этой сказке 🌲
👍2
Генераторы в JavaScript
Ты тоже впервые узнал про генераторы, когда использовал redux-saga в проекте? 😅
И даже не подозревал, что генераторы — это встроенная фича самого JS?
Давай разбираться, что это такое и зачем они вообще нужны!

🔁 Генератор — это синтаксический сахар для создания итераторов, которые умеют не только next(), но ещё и throw() и return().

> 🧠 Генераторы появились в ES6. Их придумали, чтобы проще работать с ленивыми итерациями, асинхронным кодом и потоками данных. Они позволяют ставить выполнение на паузу и возобновлять — как будто у функции есть кнопка «продолжить» 🎮

📌 Как объявить генератор:

function* gen() {}
// можно и так:
function * gen() {}
function *gen() {}


📌 Как использовать:

function* gen() {
yield 1
yield 2
}


📌 yield* — делегирует выполнение другому генератору:

function* outer() {
yield* inner()
}


📍 Главное отличие от обычной функции — можно приостанавливать выполнение и продолжать потом через .next()!

📌 Также есть .return() — завершает генерацию
📌 .throw() — завершает с ошибкой

---

🧩 Попробуем решить задачку:
https://bigfrontend.dev/quiz/generator-return

function* gen() {
yield 1
try {
yield 2
yield 3
} finally {
yield 4
}
yield 5
}

const g = gen()
console.log(g.next().value)
console.log(g.next().value)
console.log(g.return(6).value)
console.log(g.next().value)
console.log(g.next().value)


Прежде чем посмотреть ответ выбери то что считаешь правильным в опросе ниже

1 // первый yield
2 // второй yield
4 // return вызывает finally
6 // значение из return()
undefined // генератор завершён


А если хочешь копнуть глубже — вот отличный разбор:
https://doka.guide/js/generators/
🔥4
😅 Заметила такой парадокс: именно фронтендеры чаще всего слабо знают алгоритмы — а то и вовсе не знают.

🧠 Поэтому вот вам два отличных ресурса для визуализации алгоритмов — чтобы подтянуть или освежить знания:

1. 📘 Визуализации от Университета Сан-Франциско
https://www.cs.usfca.edu/~galles/visualization/Algorithms.html
Классические алгоритмы: сортировки, деревья, графы и т.д.

2. 💻 Алгоритмический тренажёр с пошаговым исполнением кода на JavaScript, Java и C++
https://algorithm-visualizer.org/
Можно видеть, как именно работает код — по шагам!

📌 Сохраняй, чтобы не гуглить в следующий раз "как работает быстрая сортировка".
👍52
🎯 Рубрика: Отвечаю на вопросы с собеседований

Почему margin между двумя блочными элементами не суммируется, а "схлопывается"?


📌 Потому что в CSS есть такое поведение, как collapsing margins — схлопывание вертикальных внешних отступов.

Когда margin-top одного элемента соприкасается с margin-bottom другого, они не складываются, а превращаются в один отступ, равный наибольшему из них.

Что с отрицательными отступами?

Если есть и положительные, и отрицательные отступы, то итоговый размер схлопнутого отступа = наибольший положительный + наименьший отрицательный (по модулю).

Если все отступы отрицательные — берётся наименьший из них (то есть самый "глубокий" минус).
🔥9
Нда. No comments
👎5💩2🤡1
🧾 HTTP Code Cheatsheet

По опыту знаю, что большинство разработчиков отлично знают такие HTTP-коды:
200, 201, 204, 301, 400, 401, 403, 404, 429, 500, 502, 503.

Но на самом деле их гораздо больше 😎

📘 Нашла отличную статью на английском:
https://medium.com/@onix_react/http-code-cheatsheet-26c129a3c9a9

📙 И полезный ресурс на русском языке:
https://restapitutorial.ru/httpstatuscodes/
На сайте также можно почитать про проектирование REST API.
🔥3
Всем привет!
Давайте подведем итоги за последние три месяца — что появилось в этом канале 👇

📌 ДАЙДЖЕСТ: МАЙ & ИЮНЬ & ИЮЛЬ

🎯От меня:
Советы как преуспеть разработчику - https://news.1rj.ru/str/frontenddevelopernews/29
Как мотивировать команду - https://news.1rj.ru/str/frontenddevelopernews/31
React-разминка - https://news.1rj.ru/str/frontenddevelopernews/32
А нужно ли вообще делить разработчиков на frontend и backend? - https://news.1rj.ru/str/frontenddevelopernews/35
Баг при использовании объекта URL
- https://news.1rj.ru/str/frontenddevelopernews/44
Debounce vs Throttle: в чём разница? - https://news.1rj.ru/str/frontenddevelopernews/49
Что такое Favicon? - https://news.1rj.ru/str/frontenddevelopernews/52
Генераторы в JavaScript - https://news.1rj.ru/str/frontenddevelopernews/55
Почему margin между двумя блочными элементами не суммируется, а "схлопывается"? - https://news.1rj.ru/str/frontenddevelopernews/58


🗺 Frontend-новости:
ESLint теперь умеет проверять HTML! - https://news.1rj.ru/str/frontenddevelopernews/34
21 мая вышел свежий релиз Bun - https://news.1rj.ru/str/frontenddevelopernews/37
Google I/O 2025 - https://news.1rj.ru/str/frontenddevelopernews/38
v1.0.0 SDK от Google Gen AI для TypeScript/JavaScript! - https://news.1rj.ru/str/frontenddevelopernews/41
ECMAScript 2025 утвержден! - https://news.1rj.ru/str/frontenddevelopernews/50


🌐 Развлечения:
IGLOO INC - https://news.1rj.ru/str/frontenddevelopernews/36
You're not a front-end developer until you've... - https://news.1rj.ru/str/frontenddevelopernews/48
How well do you know JavaScript's Date class? - https://news.1rj.ru/str/frontenddevelopernews/53
Little Red Riding Hood's Quest - https://news.1rj.ru/str/frontenddevelopernews/54


📚 Статьи и видео:
Нефункциональные требования - https://news.1rj.ru/str/frontenddevelopernews/28
gRPC против REST: Как выбрать лучший подход к проектированию API - https://news.1rj.ru/str/frontenddevelopernews/30
Надёжное обнаружение блокировки third-party cookies в 2025 году - https://news.1rj.ru/str/frontenddevelopernews/43
Mastering Creational Design Patterns in JavaScript: экспертный гайд - https://news.1rj.ru/str/frontenddevelopernews/45
Node.js 24: Your Next Big Frontend Upgrade? - https://news.1rj.ru/str/frontenddevelopernews/51
Ресурсы для визуализации алгоритмов - https://news.1rj.ru/str/frontenddevelopernews/57
HTTP Code Cheatsheet - https://news.1rj.ru/str/frontenddevelopernews/60

#дайджест
🔥7
🚀 Frontend Performance Checklist

📋 Нашла полезный чеклист по оптимизации фронтенда, где собраны способы ускорения работы сайта с точки зрения:

- HTML
- CSS
- JavaScript
- Обработки изображений
- Видео
- Шрифтов
- Хостинга / сервера

🔗 Статья: https://crystallize.com/blog/frontend-performance-checklist
👍4🔥2
🔍 Почему 0.1 + 0.2 !== 0.3 в JavaScript?

Всем привет! Сегодня разберёмся раз и навсегда, почему в JavaScript:

0.1 + 0.2 === 0.30000000000000004 // true


Кажется, что это баг в JS, но на самом деле — нет. JavaScript использует формат IEEE 754 double precision — это 64-битное представление чисел с плавающей точкой.

---

💡 Почему возникает ошибка?

Некоторые десятичные дроби, например 0.1 и 0.2, невозможно точно представить в двоичной системе. Они превращаются в бесконечные двоичные дроби.

---

📐 Как `0.1` представляется в двоичной системе?

Чтобы перевести дробную часть числа в двоичную систему, мы умножаем её на 2 и фиксируем целую часть результата. Вот шаги:

0.1 * 2 = 0.2   → 0  
0.2 * 2 = 0.4 → 0
0.4 * 2 = 0.8 → 0
0.8 * 2 = 1.6 → 1
0.6 * 2 = 1.2 → 1
0.2 * 2 = 0.4 → 0
0.4 * 2 = 0.8 → 0
0.8 * 2 = 1.6 → 1
0.6 * 2 = 1.2 → 1
... и так далее


🔁 В итоге мы получаем бесконечную периодическую двоичную дробь:

0.1₁₀ = 0.00011001100110011001100...₂


---

📦 Далее сдвигаем на 4 позиции. Почему?

Чтобы сохранить число в формате IEEE 754, его нужно записать в нормализованной форме:

1.значащие_биты × 2^экспонента


Мы сдвигаем запятую так, чтобы первая единица оказалась перед точкой:

0.0001 10011001100110011...  

1.10011001100110011... × 2⁻⁴


То есть сдвигаем на 4 позиции влево, и поэтому экспонента = -4. Это и есть часть формата IEEE 754.

---

🧮 Что делает JavaScript?

Он берёт ближайшее возможное двоичное значение, которое можно представить в 64 битах:

1.1001100110011001100110011001100110011001100110011010 × 2⁻⁴


Это — ровно 52 бита точности, и последняя цифра округлена вверх.

Теперь, если пересчитать это значение обратно в десятичную форму, получится:

0.1000000000000000055511151231257827021181583404541015625


То есть 0.1 в JS — это не ровно 0.1, а немного больше. Проверка:

console.log(0.1.toPrecision(60))
// → '0.1000000000000000055511151231257827021181583404541015625'


---

📌 То же самое происходит с `0.2` — оно представляется как:

0.200000000000000011102230246251565404236316680908203125


Поэтому при сложении 0.1 + 0.2 мы получаем:

≈ 0.3000000000000000444...


А 0.3 в памяти — это другое приближённое значение, поэтому:

0.1 + 0.2 === 0.3 // false


---
Собственно говоря вот и вся магия 💫

📚 Кстати, про достоверные источники...

В универе на магистратуре в Англии нас всегда учили что все источники информации должны быть проверенными и надежными! Вот например Wikipedia вообще НЕ надежный источник информации 😂

И нам приходилось искать все эти проверенные статьи и мы гуглили не просто в Гугле а на https://scholar.google.com

Можете попробовать поискать информацию на https://scholar.google.com и вам выйдут только академические статьи.
👍71
🤣🤣🤣
🤣12
🧩 React-хук для обработки событий клавиатуры

Возможно, вы уже видели этот хук — со мной им поделился коллега, и выглядит он действительно удобно 👇

👉 https://github.com/ArturJS/use-key-match
2🤝2
Правда жизни 🙊
😁11
Всем привет!
Недавно наткнулась на эту статью:
https://www.totaltypenoscript.com/how-to-create-an-npm-package

Решила пробежаться глазами, чтобы понять, что там есть интересного. И почему-то меня триггернули пункты 2.1 и 3.2.

Автор статьи предлагает вручную создать файлы package.json и tsconfig.json.
Не знаю, как у вас, но меня прям передёрнуло 🙃 Почему бы не предложить создать их командами:

npm init
tsc --init


Так они сразу создадутся с конфигами по умолчанию, и уже потом можно внести нужные изменения, объясняя при необходимости. А не просто копировать и вставлять код вручную. Понимаю что для своих пет проектов это удобнее и не нужно вносить кучу правок, но это же обучающий гайд.


А вы как думаете, стоит ли в таких гайдах предлагать команды или ручное создание файлов — норм вариант?

P.S. Сорри за душноту и занудство, но просто не смогла пройти мимо 😅
👍1
Announcing TypeScript 5.9

В продолжение предыдущего поста 🙂
Вышла новая версия TypeScript, и одной из фич стали изменения в команде tsc --init.
Теперь она создаёт более лаконичный и продуманный tsconfig.json — без горы комментариев и неиспользуемых опций. В файле остаются только действительно нужные настройки, плюс есть ссылка на документацию и автодополнение.

Ещё одна интересная новинка — отложенный импорт с помощью import defer:

import defer * as feature from "./some-feature.js";

// Модуль загрузится только при первом обращении к экспорту
feature.run();


Это помогает уменьшить время начальной загрузки приложения и подгружать код только тогда, когда он реально нужен.

Подробнее: https://devblogs.microsoft.com/typenoscript/announcing-typenoscript-5-9/
👍5
State of CSS 2025

Вышли результаты State of CSS 2025 🥳 https://2025.stateofcss.com/en-US

Мне была особенно интересна часть про инструменты https://2025.stateofcss.com/en-US/other-tools

И вот что мы видим :

CSS Frameworks

* Tailwind снова на первом месте. Его чаще выбирают разработчики с меньшим опытом, а более опытные предпочитают кастомные или внутренние решения.
* При этом почти половина участников (47%) либо вообще не используют фреймворки, либо пропустили этот вопрос.

CSS-in-JS

* CSS Modules со своим «лёгким» подходом всё ещё в топе.
* Styled Components по-прежнему уверенно держит вторую позицию.

Pre-/Post-processors

* Sass остаётся №1 среди препроцессоров.
* Но в целом их популярность снижается — CSS всё активнее перенимает их возможности.
👍5
CSS-Questions

Смотрите, какой классный сайт с вопросами по CSS https://css-questions.com/

Собрано 150+ вопросов — от базовых до продвинутых тем.
Здесь найдётся что-то полезное как для новичков, так и для опытных разработчиков.
А ещё можно прокачать навыки на практических заданиях по разным аспектам CSS.

Готовы проверить себя? 💡
🔥3
😂😂😂
😁9
A Few Things About the Anchor Element’s href You Might Not Have Known

Обычно то, что кажется супер простым, просто пролистывается и не читается 🙂
Но я уже много раз говорила: сила — в базовых вещах ⚡️

На днях наткнулась на статью с таким названием:
«Несколько фактов о значении href у тега `<a>`, которых вы могли не знать»
и решила посмотреть, что там интересного 👀

Вот что я нашла:

* `href="#"` — скроллит страницу в начало документа.
* `href=""` — перезагружает текущую страницу, сохраняя строку запроса (query string), но удаляя hash.

Примеры:

URL                  Преобразуется в
/path/ /path/
/path/#foo /path/
/path/?id=foo /path/?id=foo
/path/?id=foo#bar /path/?id=foo


* `href="."` — перезагружает текущую страницу, убирая и query string, и hash (если они есть).

Примеры:

URL                  Преобразуется в
/path /
/path#foo /
/path?id=foo /
/path/ /path/
/path/#foo /path/
/path/?id=foo /path/
/path/index.html /path/


* `href="?"` — тоже перезагружает страницу, убирая query и hash, но оставляет ?.

Примеры:

URL                  Преобразуется в
/path /path?
/path#foo /path?
/path?id=foo /path?
/path?id=foo#bar /path?
/index.html /index.html?


* `href="data:"` — можно делать ссылки на data URL. Например:

<a href="data:text/plain,hello world">
View plain text data URL
</a>


* `href="video.mp4#t=10,20"` — медиa-фрагменты. Можно указывать конкретный отрезок видео или аудио.
В этом примере видео начнётся с 10-й секунды и остановится на 20-й.

---

Было ли среди этого что-то, о чём вы не знали? 🤔

👉 https://blog.jim-nielsen.com/2025/href-value-possibilities/
5
Вот я думаю, что это совсем не так) SQL  точно не боюсь) А вы что думаете и чего боитесь?