после 21 итерации выдает неправильное значение даты
Правильное. Что написали - то и получаете.
Вы пляшете от 11 числа, а в августе 31 день. 11 + 21 = 32, такого числа нет, так что месяц изменяется на сентябрь. Дальше 11 + 22, а дата-то после предыдущей итерации цикла сентябрьская. Так что получить вы пытаетесь 33 уже не августа, а сентября. Такой даты тоже не бывает, месяц меняется на октябрь. Ну и так далее - на каждой итерации прыгаете на месяц с лишним вперёд.
Как избавиться от лишнего перехода к следующему месяцу?
Первый вариант - устанавливать в качестве числа месяца не стартовое значение + счётчик цикла, а текущее + 1:
const startDate = new Date(2019, 7, 11);
const currentDate = new Date(startDate);
for (let i = 0; i <= 30; i++) {
currentDate.setDate(currentDate.getDate() + 1);
console.log(currentDate);
}
Второй вариант - создавать на каждой итерации цикла новый объект даты вместо изменения уже существующего:
const startDate = new Date(2019, 7, 11);
for (let i = 0; i <= 30; i++) {
const currentDate = new Date(startDate);
currentDate.setDate(startDate.getDate() + i);
console.log(currentDate);
}