На производительность не влияет. Влияет на того, кто потом (возможно и вы сами) потом будет ловить баги.
undefined - означает, что переменная не определена.
null - означает "пусто".
Соответственно, в консоли, когда я увижу undefined, то я пойду первым делом проверять входные параметры компонента/функции/и т. д.
Если я увижу null, то пойду первым делом проверять переопределения/записи.
Если оставить пустой объект, то тут немного сложнее.
Если вам надо СНАЧАЛА получить данные, а лишь потом обращаться к объекту, то нельзя будет проверить на пустотой объект, потому, что оператор if сравнивает не поля и методы, а проверяет, ссылаются ли две переменные на один и тот-же объект.
const obj = {};
const obj2 = {};
console.log( obj === obj2 ) // false
if( obj === {} ) // false
Лично я, обычно задаю значение по-умолчанию null, если нельзя задать другое значение. Например, когда есть функция, возвращающая случайное число между max и min, то удобно входящий параметр min сделать 0 по-умолчанию.
Но если у вас не происходит особой логики, или поле подвязано реактивно к интерфейсу, то пустой объект тоже норм.