У логічному контексті (if, &&, ||, !, тернарний оператор) кожне значення перетворюється на true чи false. Хибних значень небагато:
false, 0, -0, 0n, '' (порожній рядок), null, undefined, NaN.
Усе інше - істинне, і саме тут сюрпризи:
Boolean('0'); // true - непорожній рядок
Boolean('false'); // true
Boolean([]); // true - порожній масив
Boolean({}); // true - порожній об'єкт
Де це підводить:
- Нуль як валідне значення:
function setVolume(level) {
if (!level) level = 50; // гучність 0 перетвориться на 50
}
Правильно: level ??= 50 чи явна перевірка level === undefined.
- Перевірка порожнього масиву:
if (items)завжди істинне. Потрібноif (items.length > 0). - Рендер у React:
{count && <Badge />}приcount === 0виведе на сторінку0. Правильно:{count > 0 && <Badge />}. - Рядки з форми: значення з
<input>завжди рядок, і'0'- істинний.
!!value чи Boolean(value) явно перетворюють значення на логічне - корисно, коли функція має повертати саме true/false.