В этой шпаргалке собраны основные приёмы и возможности для работы с Symbol — примитивом, который позволяет создавать уникальные ключи, управлять поведением объектов и скрывать внутренние данные. Эти техники применяются во фреймворках, итераторах, метаданных и при проектировании архитектур с инкапсуляцией. Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11❤7👍7
This media is not supported in your browser
VIEW IN TELEGRAM
Хочешь прокачать навыки HTML, CSS или JavaScript без скучных учебников? На Codepip учёба превращается в лёгкий и увлекательный процесс. Каждый уровень - это маленький челлендж, который заставит думать как программист и писать правильный код.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14❤7🤝6🔥1
Есть нативный, удобный и мульти-языковой API —
Intl.NumberFormat. Он форматирует числа, валюты, проценты и даже компактные обозначения (“1.2K”, “3M”) по правилам конкретного региона.Пример для валюты:
new Intl.NumberFormat('de-DE', {
style: 'currency',
currency: 'EUR'
}).format(1299.99);
// → 1.299,99 €Или для процентов:
new Intl.NumberFormat('en-US', {
style: 'percent',
maximumFractionDigits: 1
}).format(0.875);
// → 87.5%Или короткие числа:
new Intl.NumberFormat('en', {
notation: 'compact'
}).format(12500);
// → 12.5KЭто встроенный инструмент, который заменяет
moment.js, numeral.js и ручное форматирование. Любая валюта, любой язык, любая локаль.Please open Telegram to view this post
VIEW IN TELEGRAM
👍17❤12🤝6
This media is not supported in your browser
VIEW IN TELEGRAM
Partial Diff — расширение, которое позволяет мгновенно увидеть разницу между блоками кода. Работает с любыми файлами, от JS-функций до HTML-разметки. Идеально при рефакторинге, тестировании или ревью чужого кода. Минимум действий. Максимум наглядности.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥7🤝5
Иногда нужно выполнить код сразу, но не засорять глобальную область:
function init() {
console.log('Init logic...');
}
init();Здесь всё работает, но
init остаётся в памяти и доступна извне.Решение —
IIFE. Функция создаётся и вызывается сразу:(function () {
console.log('This runs immediately!');
})();Можно использовать стрелочную форму:
(() => {
console.log('Executed instantly!');
})();Всё, что внутри, живёт только в этой области, никаких глобальных переменных и конфликтов имён:
(() => {
const token = 'abc123';
})();
console.log(typeof token); // undefined🔥 Выполняешь код сразу и не оставляешь мусора в глобальной зоне.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤14👍10🔥6
Симулятор броска монеты на JavaScript!
Простая реализация подбрасывания монеты с небольшой задержкой — имитация реального ожидания результата.
Создаём массив сторон монеты:
Функция выводит сообщение, ждёт 2 секунды и затем выбирает случайную сторону:
Вызываем функцию, чтобы выполнить симуляцию:
🔥 Отличный пример работы с асинхронностью, случайностью и имитацией задержки — базовые приёмы для CLI-анимаций и простых игр.
📣 JS Ready | #практика
Простая реализация подбрасывания монеты с небольшой задержкой — имитация реального ожидания результата.
Создаём массив сторон монеты:
const sides = ["Орёл 🦅", "Решка 💰"];
Функция выводит сообщение, ждёт 2 секунды и затем выбирает случайную сторону:
function flipCoin() {
console.log("Бросаем монету...");
setTimeout(() => {
const result = sides[Math.floor(Math.random() * sides.length)];
console.log(`Выпало: ${result}`);
}, 2000);
}Вызываем функцию, чтобы выполнить симуляцию:
flipCoin();
🔥 Отличный пример работы с асинхронностью, случайностью и имитацией задержки — базовые приёмы для CLI-анимаций и простых игр.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15👍9❤8🤝2
В этой шпаргалке собраны методы для создания, измерения и форматирования дат. Они применяются при разработке отчётов, планировщиков, логов и API-интеграций. Уверенное владение Date позволяет работать с временем предсказуемо, корректно и без ошибок локализации.Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17🔥13❤11🤝1
Определяем язык браузера!
Определяем язык предпочтений пользователя, чтобы автоматически загрузить нужную локализацию или отобразить корректный контент.
Браузер хранит языковые настройки в объекте
Если нужно использовать только код языка (без региона), можно аккуратно выделить его:
Для более точной адаптации лучше учитывать весь список предпочтений пользователя:
Чтобы гарантировать корректные коды локалей, можно нормализовать их по стандарту
🔥 Такой подход лежит в основе автоматического выбора локали, подбора перевода интерфейса и настройки форматов дат и чисел.
📣 JS Ready | #практика
Определяем язык предпочтений пользователя, чтобы автоматически загрузить нужную локализацию или отобразить корректный контент.
Браузер хранит языковые настройки в объекте
navigator:const userLang = navigator.language;
console.log(`Язык браузера: ${userLang}`); // например: "en-US"
Если нужно использовать только код языка (без региона), можно аккуратно выделить его:
const langCode = userLang.split('-')[0].toLowerCase();
console.log(`Код языка: ${langCode}`); // "en"Для более точной адаптации лучше учитывать весь список предпочтений пользователя:
const preferred = navigator.languages?.length
? navigator.languages
: [navigator.language || 'en'];
console.log('Приоритет языков:', preferred); // ["en-US", "ru", "de"]
Чтобы гарантировать корректные коды локалей, можно нормализовать их по стандарту
BCP-47:const locales = Intl.getCanonicalLocales(preferred);
console.log('Нормализованные локали:', locales)
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15❤7👍7🤝2😁1
Сегодня покажу, как сделать настоящую мини-игру змейку прямо в терминале — с управлением, движением и логикой столкновений.
В этом посте:
• Работа с real-time input через readline;
• Отрисовка ASCII-анимации в консоли;
• Движение, рост и завершение игры при коллизии.
Прекрасная практика массивов, циклов, координат и работы с событиями.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥20👍11❤6
Иногда
fetch() или любой промис может зависнуть, а код просто ждёт.Promise.race(), как вариант решения: запускает несколько промисов и возвращает результат первого завершившегося:const withTimeout = (ms, task) =>
Promise.race([
task,
new Promise((_, reject) =>
setTimeout(() => reject(new Error('Timeout')), ms)
)
]);
Теперь можно ограничить жизнь любого промиса:
await withTimeout(3000, fetch('/api/data'));Если запрос не успеет за 3 секунды, вылетит
Error('Timeout'), и код не будет висеть.Также можно добавить отмену при таймауте через
AbortController:const fetchWithTimeout = (url, ms) => {
const controller = new AbortController();
const timer = setTimeout(() => controller.abort(), ms);
return fetch(url, { signal: controller.signal })
.finally(() => clearTimeout(timer));
};Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15👍8❤6
Создаём консольную утилиту, которая превращает обычный список товаров в аккуратный чек с подсчётом скидок, налогов и итоговой суммы.
В этой задаче:
• Реализуем обработку пользовательского ввода через readline;
• Формируем корзину и рассчитываем скидки, налоги и итог;
• Выводим красиво оформленный чек, как в настоящем магазине.
Проект учит продумывать структуру, обработку ошибок и удобство вывода для пользователя.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥11🤝5❤4