なぜjavascriptの(new Date()).getMonth() は「現在月数 - 1」を戻すのか?

答えは、英語では月を数字ではなくJanuary, February, March ... などで表現するのが主流だから。
つまり以下のような使い方を想定しているわけである。

const monthNames = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
const nowMonthIndex = (new Date()).getMonth();
console.log(monthNames[nowMonthIndex]);

ふざけるなと思うかもしれないが、(new Date()).getDay()で曜日を取得するとき同じ理由で日曜日=0で返ってくることには日本人も文句が無いので、ぐぬぬと思いながらも納得するしかない。