1

私はJSを学んでいますが、これを理解するのに苦労しています。ループ結果が「12 月」ではなく「未定義」と 12 回出てくる理由について、私のエラーを見つけられる方がいるかどうかお尋ねしたいと思います。助けてください!

ありがとう

window.onload = function() {
document.getElementById("months").innerHTML = getMonth(12);   
};

for(var month=0; month < 12; month++)
{

document.getElementById("months").innerHTML = document.getElementById("months").innerHTML + "<br/>" + month + getMonth(month); 
}

function getMonth(month) {
    var monthName;
    if (month == 12) {
        monthName = "December";
    }
    return monthName;
}

http://jsfiddle.net/priswiz/KufcA/

4

4 に答える 4

4

メソッドはDecemberそのパラメーターが12に等しい場合にのみ戻りますが、month変数はループが壊れた場合にのみ12になるためです(month < 12条件を尊重します)。メソッドを微調整する...

if (month == **11**) {

... では、このリストの最後に 12 月が表示されます。

とはいえ、確立されたライブラリ ( Moment.jsなど) を使用して日付を操作することを強くお勧めします。時間と神経を大幅に節約できます。)

補足として、最初に「monthes-string」全体を作成してから、それを として使用しinnerHTMLます。DOM 操作は慎重に使用する必要があります。

于 2013-03-20T13:27:32.023 に答える
1

month0からにインクリメントされています11( に到達する前に停止します12)。monthに渡される値getMonthは never12であるため、返さmonthNameれる は常に未定義です。

代わりに、月の数字を名前にマッピングする方法が必要です。例えば:

function getMonth(month) {
    var monthStr = ['January', 'February', ... ];
    return monthStr[month];
}
于 2013-03-20T13:28:30.390 に答える
1

12 月は 11 番目の月です。0 から始まります。

于 2013-03-20T13:26:51.207 に答える
0

私はあなたのjsfiddleを更新しました...基本的に:

for(var month=1; month < 13; month++)

to は 1 から 12 までの月を持ちます

var monthName="";

「未定義」を避けるために

于 2013-03-20T13:28:41.153 に答える