Шпаргалка по базовым операциям с регулярными выражениями. Показано, как проверять наличие совпадений, извлекать найденные фрагменты и группы захвата, получать все совпадения в строке, а также выполнять поиск, замену и разделение строк по шаблону. Также кратко разобраны различия в поведении методов и влияние флагов регулярных выражений.Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥14🤝8👍7❤3
matchMedia — проверка и отслеживание media queries!
Функция возвращает объект
Базовое использование:
Пример 1 — проверка условия:
Так можно адаптировать поведение интерфейса под системные настройки пользователя.
Пример 2 — отслеживание изменения
Событие
Это позволяет реагировать на изменение состояния
Пример 3 — адаптация логики интерфейса:
Обработчик сначала вызывается вручную для установки начального состояния, затем автоматически при изменении
Пример 4 — учет пользовательских настроек доступности:
Пример 5 — отслеживание ориентации экрана:
🔥
📣 Code Ready | #практика
matchMedia() — Web API, позволяющий проверять и отслеживать media queries напрямую из JavaScript. Это помогает синхронизировать поведение JS-кода с CSS-адаптивностью.Функция возвращает объект
MediaQueryList, содержащий результат проверки media query.Базовое использование:
const media = window.matchMedia('(max-width: 768px)');
console.log(media.matches);matches — boolean, показывающий соответствует ли текущий viewport заданному media query.Пример 1 — проверка условия:
if (window.matchMedia('(prefers-color-scheme: dark)').matches) {
document.body.classList.add('dark-theme');
}Так можно адаптировать поведение интерфейса под системные настройки пользователя.
Пример 2 — отслеживание изменения
media query:const media = window.matchMedia('(max-width: 768px)');
media.addEventListener('change', e => {
console.log('mobile:', e.matches);
});Событие
change срабатывает при изменении состояния media query.Это позволяет реагировать на изменение состояния
media query без использования window.resize.Пример 3 — адаптация логики интерфейса:
const media = window.matchMedia('(max-width: 600px)');
function updateLayout(mql) {
if (mql.matches) {
enableMobileLayout();
} else {
enableDesktopLayout();
}
}
updateLayout(media);
media.addEventListener('change', updateLayout);Обработчик сначала вызывается вручную для установки начального состояния, затем автоматически при изменении
media query.Пример 4 — учет пользовательских настроек доступности:
const motion = window.matchMedia('(prefers-reduced-motion: reduce)');
if (motion.matches) {
disableAnimations();
}Media queries позволяют учитывать пользовательские настройки доступности.Пример 5 — отслеживание ориентации экрана:
const orientation = window.matchMedia('(orientation: portrait)');
orientation.addEventListener('change', e => {
console.log('portrait:', e.matches);
});matchMedia используется для: адаптивной логики интерфейса, синхронизации JavaScript и CSS media queries, учета пользовательских настроек доступности и оптимизации поведения UI на разных устройствах.matchMedia — удобный способ проверять и отслеживать media queries напрямую из JavaScript.Please open Telegram to view this post
VIEW IN TELEGRAM
❤10👍10🔥7🤝2
Например, объект помогает хранить данные в формате ключ-значение, а через dot notation, bracket notation и destructuring можно быстро получать и использовать нужные свойства.
На картинке — базовые приёмы работы с объектами: создание, доступ к свойствам, изменение значений, добавление новых полей, деструктуризация и методы.
Сохрани, чтобы не забыть!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥8❤7🤝1
Как читать элементы массива с конца через at()!
Раньше доступ к элементам с конца массива требовал ручных вычислений длины и это ухудшало читаемость кода.
Например, чтобы получить последний и предпоследний элементы, обычно писали так.
Традиционный способ:
При сложных выражениях или частых обращениях к последним элементам такой код становится менее читаемым.
Современный метод at() позволяет обращаться к элементам массива с конца через отрицательные индексы:
Метод также поддерживает обычные положительные индексы:
Если индекс выходит за пределы массива, метод возвращает undefined:
Один из практических сценариев — работа со стеком, когда нужно быстро посмотреть верхний элемент:
Метод работает не только с массивами, но и со строками:
В отличие от charAt(), метод at() поддерживает отрицательные индексы.
Он также доступен для TypedArray:
🔥 Важно: at() не мутирует данные и не создаёт копий — это просто способ получить элемент по индексу. Метод поддерживается современными браузерами и современными версиями Node.js.
📣 JS Ready | #практика
Раньше доступ к элементам с конца массива требовал ручных вычислений длины и это ухудшало читаемость кода.
Например, чтобы получить последний и предпоследний элементы, обычно писали так.
Традиционный способ:
const arr = ["a", "b", "c", "d"];
const last = arr[arr.length - 1];
const prev = arr[arr.length - 2];
console.log(last); // "d"
console.log(prev); // "c"
При сложных выражениях или частых обращениях к последним элементам такой код становится менее читаемым.
Современный метод at() позволяет обращаться к элементам массива с конца через отрицательные индексы:
const arr = ["a", "b", "c", "d"];
arr.at(-1); // "d"
arr.at(-2); // "c"
Метод также поддерживает обычные положительные индексы:
arr.at(0); // "a"
arr.at(2); // "c"
Если индекс выходит за пределы массива, метод возвращает undefined:
arr.at(100); // undefined
arr.at(-100); // undefined
Один из практических сценариев — работа со стеком, когда нужно быстро посмотреть верхний элемент:
function peek(stack) {
return stack.at(-1);
}Метод работает не только с массивами, но и со строками:
"hello".at(-1); // "o"
В отличие от charAt(), метод at() поддерживает отрицательные индексы.
Он также доступен для TypedArray:
const bytes = new Uint8Array([10, 20, 30]);
bytes.at(-1); // 30
Please open Telegram to view this post
VIEW IN TELEGRAM
❤14👍9🔥6🤝2
This media is not supported in your browser
VIEW IN TELEGRAM
YAML — расширение для VS Code, которое добавляет подсветку синтаксиса, автодополнение и проверку структуры YAML-файлов. Помогает быстрее писать конфиги для Docker, Kubernetes, GitHub Actions и других инструментов, сразу показывая ошибки и подсказки.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤11🔥8👍7🤝1
Проверка условий в массиве без явного цикла!
Когда нужно проверить элементы массива, многие пишут цикл и флаги:
В JS для таких проверок есть нативные методы —
Метод
Метод
Оба метода прекращают перебор, как только результат становится понятен, поэтому код получается короче и читаемее.
🔥 Особенно полезно при валидации данных, проверке прав доступа и любой логике, где нужно быстро проверить условие для массива.
📣 JS Ready | #совет
Когда нужно проверить элементы массива, многие пишут цикл и флаги:
let hasEven = false;
for (const n of numbers) {
if (n % 2 === 0) {
hasEven = true;
break;
}
}
В JS для таких проверок есть нативные методы —
some() и every(), которые позволяют обойтись без явного цикла.Метод
some() проверяет, выполняется ли условие хотя бы для одного элемента массива:const hasEven = numbers.some(n => n % 2 === 0);
Метод
every() проверяет, выполняется ли условие для всех элементов массива:const allEven = numbers.every(n => n % 2 === 0);
Оба метода прекращают перебор, как только результат становится понятен, поэтому код получается короче и читаемее.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15❤10🔥8
This media is not supported in your browser
VIEW IN TELEGRAM
Это сайт с подборкой руководств, шпаргалок и полезных материалов для JavaScript-разработчиков. Здесь собраны статьи по TypeScript, React, Node.js, Next.js и другим технологиям. На сайте можно найти объяснения сложных тем, алгоритмы и структуры данных, а также практические гайды по инструментам вроде Docker и GraphQL. Все материалы удобно структурированы.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤17🔥11👍8
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🤝13👍9🔥9
navigator.sendBeacon для отправки данных при закрытии страницы!
Если нужно отправить аналитику или финальные данные сессии, обычные HTTP-запросы могут не успеть выполниться — пользователь закрыл вкладку или перешёл на другую страницу. Для таких случаев есть
Метод ставит данные в очередь на отправку и не блокирует закрытие страницы.
Базовый пример:
Метод принимает URL и данные. Запрос отправляется методом POST.
Если нужно явно указать Content-Type: application/json, лучше передать Blob:
Пример 1 — отправка при скрытии страницы:
Пример 2 — отправка
Можно отправлять строки,
Пример 3 — проверка:
Метод возвращает true, если браузер принял данные в очередь на отправку. Это не гарантия доставки, но означает, что отправка была запланирована браузером.
🔥 Если нужен ответ сервера, кастомные заголовки или полный контроль над запросом, можно использовать
📣 JS Ready | #практика
Если нужно отправить аналитику или финальные данные сессии, обычные HTTP-запросы могут не успеть выполниться — пользователь закрыл вкладку или перешёл на другую страницу. Для таких случаев есть
navigator.sendBeacon.Метод ставит данные в очередь на отправку и не блокирует закрытие страницы.
Базовый пример:
navigator.sendBeacon('/analytics', JSON.stringify({
event: 'page_close'
}));Метод принимает URL и данные. Запрос отправляется методом POST.
Если нужно явно указать Content-Type: application/json, лучше передать Blob:
navigator.sendBeacon(
'/analytics',
new Blob(
[JSON.stringify({ event: 'page_close' })],
{ type: 'application/json' }
)
);
Пример 1 — отправка при скрытии страницы:
document.addEventListener('visibilitychange', () => {
if (document.visibilityState === 'hidden') {
navigator.sendBeacon('/analytics', JSON.stringify({
event: 'session_end',
time: Date.now()
}));
}
});visibilitychange часто используют для отправки последних метрик перед уходом пользователя. Обычно это работает стабильнее, чем beforeunload.Пример 2 — отправка
FormData:const data = new FormData();
data.append('event', 'scroll_depth');
data.append('value', 80);
navigator.sendBeacon('/analytics', data);
Можно отправлять строки,
FormData, Blob, URLSearchParams и некоторые бинарные типы данных.Пример 3 — проверка:
const accepted = navigator.sendBeacon('/analytics', JSON.stringify({
event: 'leave'
}));
console.log('Beacon accepted:', accepted);Метод возвращает true, если браузер принял данные в очередь на отправку. Это не гарантия доставки, но означает, что отправка была запланирована браузером.
fetch с опцией keepalive.Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11👍10🤝8
Определяем готовность DOM через DOMContentLoaded!
Подписка на событие:
Это стандартная точка старта клиентской логики, когда элементы уже существуют в документе и с ними можно безопасно работать.
Событие
Используйте
Если скрипт подключается динамически или выполняется после загрузки документа, событие
Такой паттерн гарантирует корректный запуск независимо от момента подключения скрипта.
🔥
📣 JS Ready | #практика
DOMContentLoaded срабатывает после разбора HTML и построения DOM — можно безопасно запускать клиентский код, не дожидаясь полной загрузки страницы. Не ждёт изображения и другие ресурсы, но может задерживаться блокирующими CSS и синхронными скриптами.Подписка на событие:
document.addEventListener('DOMContentLoaded', () => {
console.log('DOM готов');
});Это стандартная точка старта клиентской логики, когда элементы уже существуют в документе и с ними можно безопасно работать.
Событие
load на объекте window срабатывает позже — после загрузки всех зависимых ресурсов страницы (изображений, стилей, шрифтов, iframe и т.д.):window.addEventListener('load', () => {
console.log('Страница полностью загружена');
});Используйте
load только когда действительно необходимы уже загруженные ресурсы (например, для получения фактических размеров изображений).Если скрипт подключается динамически или выполняется после загрузки документа, событие
DOMContentLoaded может уже произойти. В этом случае следует проверить document.readyState:if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', init);
} else {
init();
}
function init() {
console.log('Инициализация');
}Такой паттерн гарантирует корректный запуск независимо от момента подключения скрипта.
DOMContentLoaded срабатывает один раз за жизненный цикл документа и является базовой точкой запуска клиентского кода сразу после готовности структуры страницы.Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥9🤝8
This media is not supported in your browser
VIEW IN TELEGRAM
doka guide — сайт, на котором собраны шпаргалки по HTML, CSS, JS. На каждую тему есть подробный разбор с полезными советами по применению.
📌 Ссылочка: doka.guide
📣 JS Ready | #сайт
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14👍8🤝7❤2
Последовательные async-операции без лишней вложенности!
Когда несколько асинхронных действий зависят друг от друга, часто пишут вложенные
Такой код быстро превращается в избыточную вложенность обработчиков.
Решение — возвращать следующий Promise из
Каждый
Ошибки ловятся централизованно в
Важно:
🔥 Такой паттерн делает асинхронный код линейным, убирает лишнюю вложенность и упрощает поддержку.
📣 JS Ready | #совет
Когда несколько асинхронных действий зависят друг от друга, часто пишут вложенные
.then():fetch('/data').then(r => {
r.json().then(data => {
fetch(`/more/${data.id}`).then(r2 => {
r2.json().then(console.log);
});
});
});Такой код быстро превращается в избыточную вложенность обработчиков.
Решение — возвращать следующий Promise из
.then():fetch('/data')
.then(r => r.json())
.then(data => fetch(`/more/${data.id}`))Каждый
.then() получает результат предыдущего и передаёт дальше по цепочке, потому что возвращает Promise:.then(r => r.json())
.then(console.log)
Ошибки ловятся централизованно в
.catch(), если они произошли в цепочке или внутри .then():.catch(console.error);
Важно:
fetch не кидает ошибку на HTTP 4xx/5xx — в реальном коде проверяйте r.ok.Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥8🤝8
This media is not supported in your browser
VIEW IN TELEGRAM
Здесь собраны основные конструкции JS с готовыми примерами кода. Переменные, циклы, условия, массивы, строки, события, работа с датами и даже регулярные выражения. Главная фишка — это интерактивность: можно сразу копировать код, скрывать комментарии и использовать сайт как быстрый справочник во время работы.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥17👍12🤝8