jb

Оператор ?? против ||

Если нужно подставить значение по умолчанию, важно не перепутать || и ??. Оператор || считает "пустыми" 0, false, '', null, undefined и NaN, а ?? срабатывает только на null и undefined. На практике это особенно важно в конфигурации, фильтрах и настройках UI, где 0 и false часто являются корректными бизнес-значениями.

const config = {
  port: 0,
  debug: false,
  cache: null
};

const portNullish = config.port ?? 3000; // 0
const portOr = config.port || 3000; // 3000

const debugNullish = config.debug ?? true; // false
const debugOr = config.debug || true; // true

const cacheNullish = config.cache ?? 'memory'; // "memory"
const cacheOr = config.cache || 'memory'; // "memory"

Используйте ??, когда 0, false и пустая строка - валидные значения и их нельзя терять. || оставляйте для случаев, где любое falsy-значение действительно нужно заменить дефолтом. Хорошая проверка: если хотите заменить только "отсутствие" значения, берите ??; если хотите заменить любое "пустое" состояние, подходит ||.

Редактировать на GitHub