?? против || — почему nullish coalescing лучше для значений по умолчанию?

пн, 21 апреля 2025 г. - 2 мин чтения
Оператор ?? против ||

❓ ?? против || — выбирай с умом

В 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

✅ Значение input-а

const value = inputValue ?? ''; // input может быть пустым, но не undefined

✅ Отступ в пикселях

const padding = props.padding ?? 10; // 0 — допустим

🔥 Когда || — всё же уместен?

Если любое ложное значение для вас = “отсутствие”, || подойдёт:

const isDark = userPrefersDark || false;

Здесь false, 0, '' — всё считается “нет”.


📝 Вывод

  • 🛑 || не делает различий между false, 0, '' и undefined.
  • ?? подставляет значение только если null или undefined.
  • 🤓 ?? безопаснее в большинстве случаев.
  • 📌 Используйте ??, если хотите сохранить 0, false или ''.

Оператор ?? — современный стандарт для значений по умолчанию.
Не давайте ложным значениям вас запутать 🙃


📘 Хотите больше таких практичных советов — подписывайтесь на телеграм-канал и читайте другие мои статьи!