1

我正在学习 JS 并且无法弄清楚这一点。我想问一下你们中是否有人能发现我的错误,为什么我的循环结果以“未定义”而不是“十二月”的形式出现了 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

十二月是第 11 个月。它从 0 开始

于 2013-03-20T13:26:51.207 回答
1

month正在从0to递增11(它在到达 之前停止12)。由于month传递给的值getMonth是 never 12,因此返回monthName的值始终是未定义的。

相反,您想要的是一种将月份数字映射到名称的方法。例如:

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

我更新了你的 jsfiddle ......基本上:

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

从 1 到 12 有几个月

var monthName="";

避免“未定义”

于 2013-03-20T13:28:41.153 回答