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() — існує хоча б один
Переклад логіки в англійську і назад
Цей навик допомагає як писати, так і читати складні логічні умови у коді.