Какие значения являются falsy в JavaScript
Что проверяют
Знание точного списка falsy-значений и понимание, где это бьёт по коду: в условиях, в ||, в JSX. Следом почти всегда спрашивают, чем || отличается от ??, и просят предсказать результат выражений вроде Boolean([]).
Как отвечать
Falsy это значения, которые при приведении к boolean дают false. Их восемь:
false: логическая ложь;0и-0: оба нуля типа number;0n: ноль типа BigInt;"": пустая строка в любых кавычках, включая пустой шаблон;nullиundefined: отсутствие значения;NaN: результат некорректной арифметики.
Для полноты можно упомянуть document.all: объект, который по историческим причинам ведёт себя как falsy. Это эрудиция, в работе не пригодится.
Всё остальное truthy, включая то, что часто принимают за ложь: "0", "false", " ", [], {}, new Boolean(false) и любые функции.
Где это важно на практике:
- значения по умолчанию:
count || 10заменит и законный0. Для подстановки только вместоnullиundefinedесть??, иcount ?? 10вернёт0; - рендер в React:
{items.length && <List />}при пустом массиве выведет на страницу0. Пишитеitems.length > 0 &&или тернарный оператор; - проверка полей:
if (!value)отбросит и пустую строку, и ноль, поэтому для числового поля нужна явная проверкаvalue == null.
Отдельно скажите, что falsy не то же самое, что == false. Выражение [] == false даёт true из-за приведения к числу, хотя пустой массив truthy, а null == false даёт false.
Где спотыкаются
Считают пустой массив и пустой объект falsy. Это классическая ловушка, её обычно проверяют первой.
Путают || и ??, и в формах теряются нули и пустые строки, которые пользователь ввёл намеренно.
Смешивают falsy и нестрогое сравнение. Проверка if (x == false) ведёт себя иначе, чем if (!x), поэтому в коде лучше опираться на !x или строгие сравнения.