Умовна логіка у Javascript

https://medium.com/free-code-camp/a-definitive-guide-to-conditional-logic-in-javascript-23fa234d2ca3
Правдиві та хибні значення у JavaScript
Перед тим як перейти до логічних виразів, потрібно зрозуміти, що таке “truthy” у JavaScript. Через слабку типізацію JS автоматично приводить значення до булевого типу у логічних виразах (умовах, &&, ||, тернарному операторі).

Лише шість значень є хибними (falsy):

false

null

undefined

NaN

0

""


Все інше — правдиве (truthy). Наприклад, [] та {} — truthy.
Логічні оператори
У формальній логіці існують оператори: заперечення (¬), кон’юнкція (і), диз’юнкція (або), імплікація (якщо-то), еквівалентність. У JS їм відповідають:

! – заперечення

&& – кон’юнкція

|| – диз’юнкція

if (...) {} – імплікація

=== – еквівалентність

Таблиці істинності
Ці таблиці показують, який результат логічного виразу залежно від вхідних значень.

Заперечення (!): !A — протилежне A

Кон’юнкція (A && B) — істинне, лише якщо обидва A і B істинні

Диз’юнкція (A || B) — істинне, якщо хоча б одне з A або B істинне

Імплікація (A → B) — хибне лише якщо A істинне, а B — ні

Еквівалентність (A === B) — істинне, якщо A і B мають однакову істинність

Важливі зауваження
Коротке замикання (short-circuiting): false && doSomething() — doSomething не виконається. Так само true || doSomething().

Порядок операцій: && має вищий пріоритет, ніж ||. Отже, A || B && C = A || (B && C), а не (A || B) && C.

Обчислення складних виразів
Порахуйте кількість змінних (n) → створіть таблицю на 2^n рядків

Заповніть усі комбінації true/false

Вирахуйте результат для кожного рядка

Правила спрощення виразів
Подвійне заперечення: !!A === A

Комутативність: A || B === B || A

Асоціативність: (A || B) || C === A || (B || C)

Дистрибутивність: A && (B || C) === (A && B) || (A && C)

Імплікація: A → B === !A || B

Тавтології: A || !A === true

Суперечності: A && !A === false

Контрапозиція: A → B === !B → !A

Еквівалентність: A === B === (A && B) || (!A && !B)

Закон де Моргана
!(A || B) === !A && !B

!(A && B) === !A || !B

Тернарний оператор
A ? B : C === (!A || B) && (A || C)

XOR (виключне або)
A !== B

A ? !B : B

Логіка множин
Array.every() — універсальне твердження (усі відповідають умові)

Array.some() — існує хоча б один

Переклад логіки в англійську і назад
Цей навик допомагає як писати, так і читати складні логічні умови у коді.