На самом деле, это очень разные проверки.
value ||= {id: 1}
превратится в
value || (value = {
id: 1
});
а
value ?= {id: 1}
превратится в
if (value == null) {
value = {
id: 1
};
}
Как видите, вторая проверка строже - значение по-умолчанию будет использовано только если
value равно
undefined или
null. В первом случае будет заменено любое falsy значение (
false, 0, null, undefined).
Какой из этих вариантов использовать - зависит от вашего приложения. Если 0 или false, например, являются валидными значениями переменной, берите второй вариант, тогда значение не будет перезаписано.