?? против || — почему 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 — ставим 0const value = inputValue ?? ''; // input может быть пустым, но не undefinedconst padding = props.padding ?? 10; // 0 — допустим|| — всё же уместен?Если любое ложное значение для вас = “отсутствие”, || подойдёт:
const isDark = userPrefersDark || false;Здесь false, 0, '' — всё считается “нет”.
|| не делает различий между false, 0, '' и undefined.?? подставляет значение только если null или undefined.?? безопаснее в большинстве случаев.??, если хотите сохранить 0, false или ''.Оператор ?? — современный стандарт для значений по умолчанию.
Не давайте ложным значениям вас запутать 🙃
📘 Хотите больше таких практичных советов — подписывайтесь на телеграм-канал и читайте другие мои статьи!