Про логические выражения
Почему в JavaScript 0 == false даёт true, а 0 === false — false, но в Python 0 == False - тоже true? В чём отличие между языками и когда такое сравнение делать?
2 ответа
В JS двойное == перед сравнением приводит операнды к одному типу: false превращается в 0, поэтому 0 == false даёт true. Тройное === сравнивает без приведения: типы разные (number и boolean) — сразу false.
В Python история другая: никакого приведения при == нет, просто bool — подкласс int. False буквально и есть ноль, True — единица. Поэтому 0 == False даёт True, и 1 == True тоже True. Забавное следствие: True + True вернёт 2. А вот 2 == True — уже False, единице не равно.
Практический вывод: в JS используйте === всегда, == оставьте для собеседований. В Python просто не сравнивайте с True/False напрямую — вместо if x == False: пишите if not x:. Читается лучше и не ловит сюрпризов.
Короткое правило, которое закрывает почти все случаи: в JS всегда === и !==. В Python условия пишите через истинность — if x: / if not x:, с True/False не сравнивайте вообще. Из сравнений останется только осознанное x is None.