?? против || — почему nullish coalescing лучше для значений по умолчанию?
В JavaScript мы часто подставляем значения по умолчанию вот так:
const value = input || 'default';
Но это может стать ловушкой.
||
Оператор ||
возвращает первое “truthy” значение.
А значит, если input
= ''
(пустая строка) или 0
(ноль), он их воспримет как ложь и заменит.
console.log(0 || 10); // 10
console.log('' || 'default'); // 'default'
❗️ Это не всегда поведение, которого вы хотите.
??
Оператор nullish coalescing (??
) работает по-другому:
Он подставит значение по умолчанию только если переменная равна null
или undefined
, а не просто “falsy”.
console.log(0 ?? 10); // 0
console.log('' ?? 'default'); // ''
console.log(undefined ?? 'fallback'); // 'fallback'
??
Сценарий | Что нужно сохранить | Используем |
---|---|---|
0 как валидное значение | Да | ✅ ?? |
Пустая строка '' — допустима | Да | ✅ ?? |
Только null и undefined считаются “отсутствием” | Да | ✅ ?? |
Любое “ложное” значение — подставлять | Нет | ❌ || |
const price = product.price ?? 0; // если undefined — ставим 0
const value = inputValue ?? ''; // input может быть пустым, но не undefined
const padding = props.padding ?? 10; // 0 — допустим
||
— всё же уместен?Если любое ложное значение для вас = “отсутствие”, ||
подойдёт:
const isDark = userPrefersDark || false;
Здесь false
, 0
, ''
— всё считается “нет”.
||
не делает различий между false
, 0
, ''
и undefined
.??
подставляет значение только если null или undefined.??
безопаснее в большинстве случаев.??
, если хотите сохранить 0
, false
или ''
.Оператор ??
— современный стандарт для значений по умолчанию.
Не давайте ложным значениям вас запутать 🙃
📘 Хотите больше таких практичных советов — подписывайтесь на телеграм-канал и читайте другие мои статьи!