Веб-страница
25.3K subscribers
1.53K photos
482 videos
1 file
3.72K links
Всё по фронтенду, бэкенду и девопсу в одном месте

Разместить рекламу: @tproger_sales_bot

Правила общения: https://tprg.ru/rules

Другие каналы: @tproger_channels

Сайт: https://tprg.ru/site

Регистрация в перечне РКН: https://tprg.ru/64ai
Download Telegram
blur в JavaScript: что это такое

Событие blur не стоит путать с CSS-свойством. В JavaScript оно срабатывает на элементах, которые могут получать фокус в случаях, когда эти элементы фокус теряют. Например, пользователь «ушёл» с этого элемента и переключил внимание на что-то другое (другой элемент, окно или вкладку).

Когда происходит blur:

1. Клик мышью в другое место.
2. Переход клавишей Tab.
3. Смена вкладки или окна.

Когда может пригодиться blur:

— Валидация «по уходу». Проверить введённый e-mail или телефон сразу после того, как пользователь перестал редактировать поле.
— Скрытие подсказок. Прятать всплывающие хинты, когда внимание пользователя ушло с элемента.
— Автосохранение. Сохранять черновик, как только заголовок заметки потерял фокус.

Как это выглядит в коде:

<input id="email" placeholder="Введите e-mail" />

<script>
const emailInput = document.getElementById('email');

emailInput.addEventListener('blur', () => {
console.log('Поле e-mail потеряло фокус — проверяем данные.');
// Здесь может быть ваша валидация или отправка на сервер
});
</script>


Важные нюансы:

— blur не всплывает вверх по дереву DOM. Если нужно отследить потерю фокуса на контейнере, слушайте событие focusout: оно ведёт себя так же, но всплывает.
— Порядок событий. Когда элемент теряет фокус, сначала срабатывает focusout, затем blur. Это редко важно, но полезно знать при сложной логике.

#простымисловами #javascript
👍3🔥3
Проверка совместимости JavaScript-кода с окружением за секунды

Runtime-compat — это инструмент, который позволяет проверить, какие фичи вашего кода поддерживаются в разных средах выполнения, а какие — нет.

Запустите его и он покажет, что будет работать, например, с Node.js, а что придется переписать. Сейчас инструмент поддерживает Node.js, Deno, Bun, Cloudflare Workers и другие среды выполнения.

#инструменты #javascript
🔥4
Одна переменная на три мира: как синхронизировать значение между HTML, CSS и JavaScript

В статье Крис Койер показывает, как установить переменную size в Pug и передать её одновременно в HTML (для генерации сетки), CSS (через --size для настройки grid-template-columns) и JavaScript (через window.size для навигации по стрелкам). Простой приём, который позволяет управлять интерфейсом из одного источника данных.

#фронтенд #pug #css #javascript
🔥8
Краткая история JavaScript

В этом году JavaScript исполняется 30 лет. За это время язык прошёл путь от 10‑дневного прототипа до платформы, питающей серверы, приложения и AI-инструменты.

В статье — ключевые вехи эволюции: появление XMLHttpRequest, Node.js, TypeScript, Deno, Bun и даже планы TS на Go. Здесь вы получите не просто хронологию, а понимание, как JavaScript меняет мир разработки.

#javascript #историяit
👍8🔥5
Репозиторий, в котором собраны лучшие практики по тестированию JavaScript и Node.js приложений

Подборка советов составлена на основе десятков статей, книг и инструментов:
— cтруктура тестов,
— тесты для бэкенда и микросервисов,
— UI-тесты для веб-компонентов,
— анализ эффективности тестов,
— настройка CI.

Сохраните, чтобы не потерять: https://github.com/goldbergyoni/javascript-testing-best-practices

#javascript #nodejs #тестирование #лучшиепрактики
👍6🔥21
Virtual Mirror Library — библиотека виртуального макияжа и онлайн примерки аксессуаров

Приложений, которые поддерживают онлайн-примерку косметики, одежды или даже мебели в квартире, сегодня много. Но на этот раз предлагаю вам оценить проект, который не требует установки и работает прямиком из браузера.

Здесь автор рассказала, как ей пришла в голову эта идея и как она её реализовала. Код, основные вехи проекта и инструкция по использованию также ждут вас внутри статьи.

Мужики, делитесь фотками тестов 😤

#фронтенд #javascript
Please open Telegram to view this post
VIEW IN TELEGRAM
😁3🤔3
var, let, const — в чём разница?

В JavaScript есть три способа объявить переменную. Все они ведут себя по-разному. Разберём детально, но простыми словами, чтобы больше не было путаницы.

🟡 var — привет из прошлого

Особенности:

🔁 Область видимости: не блочная, а функциональная

🔼 Всплывает (hoisting) — поднимается вверх функции, но без значения

🔄 Можно переобъявить и изменить

😵 Может вести себя неожиданно

if (true) {
var a = 1;
}
console.log(a); // 1 — переменная "вышла" из блока

console.log(b); // undefined — переменная есть, но ещё без значения
var b = 2;


🔵 let — современный стандарт

Особенности:

🔁 Область видимости: блочная

🔼 Всплывает, но в «мертвой зоне» (TDZ — Temporal Dead Zone), поэтому использовать до объявления нельзя

Нельзя переобъявить в той же области видимости

Можно менять значение

if (true) {
let c = 10;
}
console.log(c); // ReferenceError — переменная вне блока

let d = 5;
let d = 6; // тоже ошибка — уже объявлена


🟢 const — постоянство с нюансами

Особенности:

🔁 Область видимости: как у let — блочная

Нельзя изменить значение

⚠️ Но если значение — объект или массив, можно менять его внутренности

📌 Нужно обязательно сразу присвоить значение при объявлении

const x = 42;
x = 100; // ошибка

const user = { name: "Alice" };
user.name = "Bob"; // работает
user = { name: "Charlie" }; // ошибка


В чём подвох в циклах?

Один из частых багов — поведение var в цикле.

for (var i = 0; i < 3; i++) {
setTimeout(() => console.log(i), 0);
}
// 3, 3, 3 — потому что var одна на весь цикл

for (let i = 0; i < 3; i++) {
setTimeout(() => console.log(i), 0);
}
// 0, 1, 2 — потому что let создаёт новую переменную на каждой итерации


Что использовать?

const — почти всегда. Надёжно, понятно, предсказуемо.
let — если переменная будет меняться.
var — только если пишете поддержку старого кода. В новом — не надо.

#простымисловами #javascript #основы
👍26💩8🔥2
Для чего используется stopPropagation()

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

При клике по вложенному контейнеру в консоль выводится сообщение «Внутренний контейнер». Если убрать event.stopPropagation(), то при клике по вложенному контейнеру, в консоль будут выведены оба сообщения.

#основы #javascript
👍11🔥4
Веб-страница
var, let, const — в чём разница? В JavaScript есть три способа объявить переменную. Все они ведут себя по-разному. Разберём детально, но простыми словами, чтобы больше не было путаницы. 🟡 var — привет из прошлого Особенности: 🔁 Область видимости: не блочная…
Что не так с var — и почему его всё реже используют

В предыдущем посте многие высказывались по поводу того, что var не является устаревший способом. Давайте разберемся.

Да, var — не устарел и не запрещён. Он по-прежнему часть JavaScript. Но в современной разработке ему предпочитают let и const. Не потому что это модно, а потому что так безопаснее и предсказуемее.

Почему let и const — лучше:

— работают в пределах блока, а не всей функции;
— защищают от доступа до инициализации (TDZ);
— не позволяют случайно переобъявить переменную;
— делают поведение кода очевидным — особенно в условиях и циклах.

🚫 Почему var — неудачный выбор по умолчанию:

— всплывает с undefined, даже если объявлен ниже;
— работает во всей функции, а не в том месте, где его видно;
— легко переопределяется и ведёт себя неожиданно в асинхронных сценариях и циклах.

⚙️ А как же производительность?

На уровне сборки (Vite, esbuild, Webpack) весь ваш let и const может быть скомпилирован в var, если это действительно ускоряет загрузку.

Вы пишете безопасно, а сборщик сам оптимизирует.

📌 Когда var всё-таки уместен?

Если вы работаете со старым кодом, пишете под очень старые браузеры, или используете особые трюки с hoisting — var может быть оправдан. Но это редкость, а не рекомендация.

Всё ещё не согласны? Делитесь вашим мнением в комментариях.

#простымисловами #javascript
17👍3👎1
Как переносить «висячие» слова с помощью JavaScript

Тексты, в которых на новой строке одиноко торчит «в», «на» или «и», сразу теряют в читаемости. В этой статье — короткий, но полезный приём: как с помощью JavaScript автоматически заменять пробелы после коротких слов на неразрывные и избавляться от висячих слов. Работает и для HTML-содержимого, и для Markdown. Минимум кода — максимум пользы для интерфейса и редактурной чистоты.

#фронтенд #javascript #ux
👍11👎31
This media is not supported in your browser
VIEW IN TELEGRAM
Естественно, Liquid Glass

Нашел интересный CodePen-проект: Apple со своим обновлением заставили сообщество переосмыслять Liquid Glass, не без этого. Автор реализовал такое с помощью пользовательского шейдера (shaderMaterial) на WebGL с помощью three.js.

Посмотреть код можно здесь: https://codepen.io/supah/pen/dPodbrX

#codepen #css #javascript
@tproger_web
🔥7👍4👎1
Упрощаем работу с регулярками в JavaScript

RegExp может выглядеть как набор символов и скобок, но правильный подход — это чистый, понятный и протестированный код. Здесь собраны техники, которые помогут вам улучшить ваши навыки работы с регулярками и упростить их использование.

#фронтенд #javascript #regexp
😁9👍2
#простымисловами: Как устроен и зачем нужен async/await

Асинхронный код на JavaScript всегда был необходим — запросы к серверу, таймеры, работа с файлами занимают время и не должны блокировать страницу. Раньше для этого использовали коллбэки или цепочки промисов, но такие конструкции быстро становились запутанными и сложными в поддержке.

async/await решает эту проблему. Это синтаксис, который позволяет писать асинхронный код в привычной пошаговой форме, но под капотом он остаётся неблокирующим.

Как это работает

Чтобы использовать async/await, достаточно объявить функцию с ключевым словом async. Это значит, что она всегда вернёт промис. Внутри такой функции можно применять await, чтобы дождаться завершения промиса перед выполнением следующей инструкции.

Пример:
async function fetchData() {
const response = await fetch('/data.json');
const data = await response.json();
console.log(data);
}


Такой код легко читать и поддерживать — он идёт по шагам и не содержит вложенных .then() и .catch().

Преимущества по сравнению с коллбэками и промисами:

— Нет вложенных функций и «пирамид ада» из коллбэков.
— Ошибки можно обрабатывать привычным try/catch, как в синхронном коде.
— Логика программы остаётся линейной и предсказуемой.

Коллбэки и промисы по‑прежнему работают и подходят для некоторых случаев, но async/await значительно облегчает написание и поддержку асинхронного кода.

Если вы всё ещё используете цепочки .then() или длинные коллбэки — попробуйте переписать их с async/await. Код станет чище, а ошибки — легче отлавливать.

#javascript
🔥8👍43
Решаем судоку на JavaScript: хэш‑карты + рекурсия

Как заставить JavaScript разгадывать судоку? В статье показан простой и понятный подход: доска представляется в виде двумерного массива, а для проверки допустимости ходов используются хэш‑карты. Решатель построен на рекурсивном переборе возможных значений с откатом, пока не найдётся правильное заполнение всей сетки.

#javascript #алгоритмы
🔥6
Что такое прототипное наследование в JavaScript?

Предлагаем вам новый формат — мы #простымисловами рассказываем о программировании, но прежде чем прочитать, попробуйте самостоятельно вспомнить о чем речь, чтобы проверить свои знания. Пишите своё понимание в комментарии, а только потом читайте наше объяснение.

В других языках (например, Java или C#) есть классы — «шаблоны», по которым создаются объекты, и у которых можно наследовать методы и свойства.

В
JavaScript всё устроено немного иначе — он изначально не был «классовым», и вместо этого использует **прототипы**.

В
JavaScript **каждый объект внутри себя хранит ссылку на другой объект — прототип**.

Если вы обращаетесь к свойству или методу, которого нет в текущем объекте,
JavaScript заглянет в его прототип. Не нашёл там? Пойдёт дальше — в прототип прототипа.

Эта цепочка называется **прототипной цепочкой**.
const animal = {
eats: true
};

const rabbit = {
jumps: true
};

rabbit.__proto__ = animal;

console.log(rabbit.jumps); // true (есть в самом объекте)
console.log(rabbit.eats); // true (нашёлся в прототипе)


Здесь rabbit не хранит eats напрямую, но когда вы к нему обращаетесь — движок пойдёт по цепочке в animal и найдёт.

**Почему это удобно?**

1. Можно «раздавать» общие методы всем объектам через прототип — не дублируя код.
2. Можно строить целые цепочки наследования без классов.
3. Всё это гибко и динамично.

Сейчас в
JavaScript уже появились **классы**, но внутри они всё равно реализованы через прототипы — просто это более привычный синтаксис для тех, кто приходит из других языков.

Так что прототипное наследование — это способ объектов «подглядывать» в другие объекты за свойствами и методами. И именно так устроен весь
JavaScript под капотом.

#javascript
12👍7
Apple Lisa в браузере: почувствуйте революцию интерфейсов 80‑х

В 1983‑м Apple выпустила Lisa — первый коммерческий компьютер с графическим интерфейсом. Тогда он стоил почти $10 000 и казался фантастикой.

Теперь ту самую Lisa можно запустить прямо в браузере: эмулятор на чистом JavaScript воспроизводит интерфейс до мелочей. Всё как в оригинале: при перетаскивании движется только рамка, потому что мощности «железа» не хватало, чтобы рендерить содержимое в реальном времени.

Сейчас проект ещё в альфе, но уже отлично показывает, какой была революция интерфейсов 80‑х и первый графический опыт на ПК.

Подробности о проекте и ссылка на эмулятор здесь.

#историяit #apple #javascript
6😁2🤯2
Почему push() может навредить вашему коду — и как писать лучше

На первый взгляд безобидный метод массива push() может испортить данные, запутать логику и вызвать баги. Особенно это заметно в React и других реактивных средах. В статье — наглядно и с примерами: чем опасна мутация массивов, как это приводит к скрытым ошибкам и какой подход используют опытные разработчики вместо push().

А вы отказались от push() или всё ещё используете?

#javascript #фронтенд
👎29👍43
Hack Frontend: тренируйтесь для собеседования с огоньком

Если вы мечтаете прокачать фронтенд‑скиллы и спокойно заходить на тех‑интервью — обратите внимание на Hack Frontend. Это платформа, где вы сможете отточить навыки и подготовиться к успешному собеседованию.

Что внутри:

— Современный фронтенд‑стек и лучшие практики.
— Задания, которые реальнее всего встретить на интервью.
— Построено для реализации — вы сразу тренируетесь на реальных примерах, не просто читаете теорию.

#фронтенд #тренажер #javascript
7👍1
Пишем игру на JS/TS и развиваем навык работы с кодом

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

Сохраните, чтобы не потерять: https://tproger.ru/articles/pet-proekt-pishem-igru-na-js-ts-i-razvivaem-navyk-raboty-s-kodom/

#typescript #javascript #петпроект
👍6🤔2
Асинхронная итерация по-новому: как работает Array.fromAsync в JavaScript

Асинхронные задачи — это обычное дело во фронтенде. Но лаконичного способа обработать их сразу пакетами до недавнего времени не было. Array.fromAsync — свежий инструмент для простого и элегантного обхода промисов в массивах.

В статье — нюансы работы метода, примеры из жизни и сценарии, где он может здорово сэкономить нервы и строчки кода.

#javascript #фронтенд
👎4🔥2