Почему поле есть в форме, но отсутствует в FormData FormData собирает пары «имя — значение» из полей формы. Видимое поле не обязательно попадёт в этот набор. Сохраните пример в HTML-файл и откройте его в браузере. Результат смотрите в консоли разработчика. <form> <input type="checkbox" name="topic" value="js" checked> <input type="checkbox" name="topic" value="sql"> <input name="hidden" value="x" disabled> <input value="no-name"> </form> <script> const form = document.querySelector("form") console.log([...new FormData(form)]) </script> В наборе окажется только пара ["topic", "js"]. Неотмеченный флажок пропущен, отключённое поле тоже. У последнего поля нет name, поэтому оно не даёт пары. Отметьте второй флажок и повторите последнюю строку JavaScript в консоли: получите два значения с именем topic. Сбор данных сам по себе ничего не отправляет на сервер. Условия перечислены на MDN.
Открыть в Telegram
Точка входа в программирование
Фундаментальные знания по основам программирования Разместить рекламу: @tproger_sales_bot Правила общения: https://tprg.ru/rules Другие каналы: @tproger_channels Сайт: https://tprg.ru/site Регистрация в перечне РКН: https://tprg.ru/zrgj
Подписчики, 30 дней
24 окт. – 4 нояб.−55 (−0,3%)
Показать таблицей
| Дата | Подписчики |
|---|---|
| 24 окт. 2026 г. | 17 928 |
| 25 окт. 2026 г. | 17 921 |
| 26 окт. 2026 г. | 17 912 |
| 27 окт. 2026 г. | 17 911 |
| 28 окт. 2026 г. | 17 902 |
| 29 окт. 2026 г. | 17 900 |
| 30 окт. 2026 г. | 17 892 |
| 31 окт. 2026 г. | 17 894 |
| 1 нояб. 2026 г. | 17 892 |
| 2 нояб. 2026 г. | 17 889 |
| 3 нояб. 2026 г. | 17 879 |
| 4 нояб. 2026 г. | 17 873 |
Средние просмотры поста по дням
По дню публикации
Показать таблицей
| Дата | Просмотров на пост |
|---|---|
| 18 окт. 2026 г. | 583 |
| 19 окт. 2026 г. | 597 |
| 20 окт. 2026 г. | 536 |
| 21 окт. 2026 г. | 524 |
| 22 окт. 2026 г. | 499 |
| 23 окт. 2026 г. | 460 |
| 24 окт. 2026 г. | 474 |
| 25 окт. 2026 г. | 502 |
| 26 окт. 2026 г. | 526 |
| 27 окт. 2026 г. | 509 |
| 28 окт. 2026 г. | 479 |
| 29 окт. 2026 г. | 492 |
| 30 окт. 2026 г. | 497 |
| 31 окт. 2026 г. | 453 |
| 1 нояб. 2026 г. | 470 |
| 2 нояб. 2026 г. | 478 |
| 3 нояб. 2026 г. | 431 |
| 4 нояб. 2026 г. | 273 |
Самые просматриваемые за месяц
- 01Просмотры615Пересылки4Реакции3Комментарии0
- 02Просмотры607Пересылки4Реакции1Комментарии0
- 03Просмотры595Пересылки2Реакции1Комментарии0
- 04Просмотры588Пересылки4Реакции1Комментарии0
- 05Просмотры569Пересылки1Реакции3Комментарии0
Новые посты
Параметр командной строки с двумя допустимыми значениями Пусть скрипт принимает параметр --format со значением json или csv. Чтобы не проверять опечатки вручную, передайте допустимые значения в choices. Модуль argparse из стандартной библиотеки Python сам разберёт аргумент и сообщит о неверном значении. Сохраните пример как format.py. import argparse parser = argparse.ArgumentParser() parser.add_argument("--format", choices=["json", "csv"]) args = parser.parse_args() print(args.format) Запустите python3 format.py --format json: получите json. Замените значение на xml: программа завершится с кодом 2 и сообщением о неверном выборе. Точный текст ошибки зависит от версии. Без аргумента здесь получится None: ограничение значений не делает параметр обязательным. Если задаёте type, проверка choices идёт после преобразования. Примеры — в справке Python.
Открыть в TelegramКлик по кнопке можно обработать у родителя В списке две кнопки, а обработчик клика один. Он стоит на общем div, потому что событие от кнопки поднимается к родителю. Это называется делегированием событий. Сохраните пример в HTML-файл и откройте его в браузере. <div id="menu">Фон <button>A</button><button>B</button></div> <script> const menu = document.querySelector("#menu") menu.addEventListener("click", event => { console.log(event.target.tagName, event.currentTarget.id) }) </script> Нажмите A и B: в консоли оба раза будет BUTTON menu. Нажатие на слово «Фон» даст DIV menu. target показывает, откуда пришло событие, currentTarget — чей обработчик сейчас работает. В этом примере логируем все клики. Для действия над кнопкой сначала проверьте цель. Если внутри кнопки появится span, целью может стать он. Механизм разобран на MDN.
Открыть в TelegramДинамика просмотровСкрыть динамику
Рост просмотров
Часов после публикации
Показать таблицей
| Часов после публикации | Просмотры |
|---|---|
| 0 ч | 0 |
| 9 ч | 285 |
| 15 ч | 315 |
| 33 ч | 414 |
- Всего сейчас414
zip может остановиться слишком рано Имена учеников и номера задач лежат в двух списках. zip собирает их в пары, но без дополнительной проверки заканчивает на самом коротком списке. Лишнее имя легко потерять. В Python 3.10+ это можно заметить с помощью strict=True. names = ["Ada", "Lin"] print(list(zip(names, [1, 2], strict=True))) pairs = zip(names, [1], strict=True) print("created") try: print(list(pairs)) except ValueError: print("ValueError") Получатся две пары, затем created и ValueError. Ошибка возникает при переборе, а не при создании zip. Если прочитать только первую пару, до несовпадения вы ещё не дойдёте. Это ленивый итератор: он берёт элементы по мере запроса. Подробности есть в документации Python.
Открыть в TelegramДинамика просмотровСкрыть динамику
Рост просмотров
Часов после публикации
Показать таблицей
| Часов после публикации | Просмотры |
|---|---|
| 0 ч | 0 |
| 11 ч | 359 |
| 17 ч | 382 |
| 36 ч | 448 |
- Через 24 часа382
- Всего сейчас448
Отменённый fetch попадает в обработчик ошибок Чтобы отменить fetch, создают AbortController и передают его signal в параметры запроса. Вызов abort() сообщает об отмене. Отклонённый промис нужно обработать, иначе отмена может выглядеть как необработанная ошибка. Выполните пример с карточки в консоли современного браузера. Здесь сигнал отменён заранее, а запрос по адресу data: не обращается к внешнему серверу. Обработчик напечатает AbortError. Это проверка поведения отменённого сигнала, а не скорости сети. Уже отменённый сигнал нельзя сбросить. Для нового запроса создайте новый контроллер. Отмена на стороне клиента не гарантирует откат действий сервера. Примеры использования — в документации MDN.
Открыть в TelegramДинамика просмотровСкрыть динамику
Рост просмотров
Часов после публикации
Показать таблицей
| Часов после публикации | Просмотры |
|---|---|
| 0 ч | 0 |
| 9 ч | 310 |
| 33 ч | 476 |
| 39 ч | 485 |
- Всего сейчас485
Свойство может принадлежать прототипу JavaScript-объект может наследовать свойства, которых нет среди его собственных полей. Поиск идёт и по прототипу — объекту, от которого он наследует свойства. Поэтому оператор in и Object.hasOwn отвечают на разные вопросы. Создайте const settings = Object.create({ theme: "dark" }) и задайте settings.size = 0. Проверка "theme" in settings даст true, а Object.hasOwn(settings, "theme") — false. При этом Object.hasOwn(settings, "size") вернёт true: свойство со значением 0 остаётся собственным. Поменяйте значение на undefined и проверьте снова. Метод доступен в современных браузерах, детали — на MDN.
Открыть в TelegramДинамика просмотровСкрыть динамику
Рост просмотров
Часов после публикации
Показать таблицей
| Часов после публикации | Просмотры |
|---|---|
| 0 ч | 0 |
| 11 ч | 344 |
| 35 ч | 463 |
| 41 ч | 471 |
- Всего сейчас471
Апостроф в имени не должен ломать SQL Имя O'Brien содержит апостроф. Если вставлять его прямо в текст SQL, апостроф может нарушить синтаксис запроса. В модуле Python sqlite3 передавайте значение отдельно: место для него обозначается ?. В учебной базе с таблицей users(name TEXT) и таким именем выполните con.execute("SELECT name FROM users WHERE name = ?", (name,)).fetchall(). Запрос найдёт запись с этим именем. Запятая в (name,) нужна: это кортеж с одним элементом. Не собирайте запрос из пользовательского ввода через f-строку или сложение строк. Параметры подставляют значения, а не имена таблиц или колонок. Полный пример на карточке работает в памяти и не сохраняет базу на диске. Об использовании параметров — в документации Python.
Открыть в TelegramДинамика просмотровСкрыть динамику
Рост просмотров
Часов после публикации
Показать таблицей
| Часов после публикации | Просмотры |
|---|---|
| 0 ч | 0 |
| 8 ч | 273 |
| 32 ч | 436 |
| 63 ч | 493 |
| 69 ч | 494 |
- Всего сейчас494
Пробел разделяет аргументы, пока нет кавычек В Bash записи report file и "report file" дают разное число аргументов. Это важно, когда имя файла содержит пробел: программа должна получить одно имя целиком. Для проверки без создания и изменения файлов выполните printf '<%s>\n' report file. Увидите две строки: <report> и <file>. Повторите с кавычками: printf '<%s>\n' "report file". Теперь строка одна: <report file>. Угловые скобки здесь помогают увидеть границы аргументов. Двойные кавычки сохраняют пробел, но не делают всё содержимое буквальным: подстановка переменных внутри них работает. Другие оболочки могут отличаться. Детали — в руководстве Bash.
Открыть в TelegramДинамика просмотровСкрыть динамику
Рост просмотров
Часов после публикации
Показать таблицей
| Часов после публикации | Просмотры |
|---|---|
| 0 ч | 0 |
| 11 ч | 294 |
| 35 ч | 413 |
| 65 ч | 446 |
| 71 ч | 446 |
- Всего сейчас446
Почему текст прыгает при загрузке картинки На видео из статьи web.dev текст под серой плашкой уезжает вниз, когда загружается фотография. Браузер не знал заранее, какую высоту оставить под изображение. Такой сдвиг особенно мешает, если вы уже начали читать или нажимать ссылку. Для картинки 800 × 400 задайте <img src="photo.jpg" width="800" height="400" alt="...">. Верное соотношение сторон помогает зарезервировать место до загрузки. Чтобы картинка занимала всю ширину, добавьте отдельно img { width: 100% } и img { height: auto }. Проверьте страницу с замедленной загрузкой и сравните с вариантом без размеров. Соотношение сторон можно задавать и через aspect-ratio. Как задать размеры до загрузки, разобрано в статье web.dev.
Открыть в TelegramДинамика просмотровСкрыть динамику
Рост просмотров
Часов после публикации
Показать таблицей
| Часов после публикации | Просмотры |
|---|---|
| 0 ч | 0 |
| 8 ч | 228 |
| 20 ч | 284 |
| 68 ч | 457 |
- Через 6 часов228
- Через 24 часа284
- Всего сейчас457
Почему every возвращает true для пустого массива Метод every проверяет, соответствует ли каждый элемент условию. [3, 7].every(n => n > 0) вернёт true, а массив с -1 — false. Проверка прекращается при первом неподходящем элементе. Теперь выполните [].every(n => n > 0). Результат снова true: в пустом массиве нет элемента, который нарушил бы условие. Функция проверки при этом вообще не вызывается. Если по задаче нужен непустой список положительных чисел, проверяйте оба условия: values.length > 0 && values.every(n => n > 0). Подставьте пустой массив и сравните результаты. На MDN есть и другие особенности метода, включая пропуск пустых мест в разреженном массиве.
Открыть в TelegramДинамика просмотровСкрыть динамику
Рост просмотров
Часов после публикации
Показать таблицей
| Часов после публикации | Просмотры |
|---|---|
| 0 ч | 0 |
| 11 ч | 263 |
| 23 ч | 310 |
| 71 ч | 448 |
- Через 24 часа310
- Всего сейчас448
Связи
Похожие каналы
Веб-страница@tproger_webТехнологии22,2 тыс.
Инструменты программиста@prog_toolsТехнологии12,9 тыс.
Типичный программист@tprogerТехнологии78 тыс.
Борис опять@boris_againТехнологии18 тыс.
SpaceX | Starship News@starshipnewsliveТехнологии18,1 тыс.
СофтТех@it2b_channelТехнологии18,2 тыс.
AI for Devs@ai_for_devsТехнологии18,5 тыс.
Юра, прости@prostinasТехнологии18,5 тыс.