IT Коннект | IT, AI и Технологии
1.08K subscribers
159 photos
27 videos
68 links
Взгляд CTO на IT с опытом
Советы по поиску работы и вакансии
Тренды и новинки рынка
Актуальные темы мира технологий
Ресурсы и инструменты для развития

Владелец: Болтаев Акмал @boltaevap
Download Telegram
По мотивам JavaScript

Забавно смотреть, как люди смотрят на if (user = admin) и думают «ага, сравнение — все плохо».

На самом деле все еще хуже: это не сравнение, это присваивание. И присваивание возвращает значение, которое потом приводится к true/false. То есть ты не «проверяешь», ты по‑тихому делаешь пользователя админом и проходишь в блок if, если присвоенное значение истинно.

Коротко по делу:
= — это присваивание. a = b присваивает b в a и возвращает b.

== и === — это сравнения (=== — строгое, без приведения типов).

В if (user = admin) ты меняешь user и результат выражения — admin, а не true/false сам по себе. Если admin — truthy, условие выполнится.

Truthy/falsey: false/0/""/null/undefined/NaN — falsey; все остальное — truthy. Так что баг может быть незаметным.

Пример, чтобы не гадать:
let user = 'guest';
const admin = 'admin';
if (user = admin) { // присвоили: user теперь 'admin', условие truthy -> выполняется
// Ой
}


Как не попадаться на это:
1. Используй === для сравнения.
2. Включи линтер (ESLint) с правилом no-cond-assign — сразу подсветит случайные присваивания в условиях.
3. Переключись на TypeScript — многие «случайные» присваивания станет легче отловить.
4. Пиши тесты и code review — глаз человека тоже нужен.
5. Если уж совсем паранойя —Yoda‑условия ('admin' === user) убирают ошибку «= вместо ===» (но это спорно).

И да — JavaScript иногда все же отстой.

#ИТ #разработка #JavaScript
🔥3530🥰28😍26💯26👍25🤩25❤‍🔥25🎉24