доброе утро.
Вам ведь нужно убедиться, что введенное значение является числом?
Если так, тогда вам проще это условие и задать.
if (typeof +expenses !== 'number' ) {
//...
}
где "+" - это приведение к типу Number. Можно воспользоваться parseInt(n);
Теперь в принципе по логике:
Допустим, что ваше условие проверяет на тип NaN (а не функцию isNaN(n)) и typeof возвращает не строку, тогда хочу обратить внимание на логический оператор && (И), который при любом совпадении с условием вернет false, так как NaN !== null && (и) null !== 'пустая строка',
итак в каждом условии вы проверяете результат typeof (...) - то есть строку с типом данных отличных от строки (возвращаемую typeof )
Пропущена закрывающая тело функции фигурная скобка.
Как я понимаю, вы хотели вызвать последовательно и записать два значения переданных юзером, в этом случае можно обойтись без цикла.
Promise || условными операторами.
То есть при клике вы предлагаете записать значение, обрабатываете его(успешный случай и случай неудачный) и затем проверив сделан ли первый шаг, предлагаете еще раз записать уже второе значение и в новую переменную. Таким образом у вас 2 значения в разных переменных, которыми вы в последствии можете оперировать как вам нужно.