1

有时这段代码可以正常工作,但这取决于我将要执行的部分放在哪里,这实际上是说它根本不起作用——但我真的不知道为什么不。也许你们中的任何一个人都可以提供一些见解:

function displayBanner(currentDate) {
    var munf = currentDate.getMonth();

    var imageSrc = "defaultLogo.gif";   

    imageSrc = (munf == 9) ? ("fallLogo.gif") : ("defaultLogo.gif");
    imageSrc = (munf == 8) ? ("fallLogo.gif") : ("defaultLogo.gif");
    imageSrc = (munf == 10) ? ("fallLogo.gif") : ("defaultLogo.gif");

    imageSrc = (munf == 11) ? ("winterLogo.gif") : ("defaultLogo.gif");
    imageSrc = (munf == 0) ? ("winterLogo.gif") : ("defaultLogo.gif");
    imageSrc = (munf == 1) ? ("winterLogo.gif") : ("defaultLogo.gif");

    imageSrc = (munf == 2) ? ("springLogo.gif") : ("defaultLogo.gif");
    imageSrc = (munf == 3) ? ("springLogo.gif") : ("defaultLogo.gif");
    imageSrc = (munf == 4) ? ("springLogo.gif") : ("defaultLogo.gif");

    imageSrc = (munf == 7) ? ("summerLogo.gif") : ("defaultLogo.gif");
    imageSrc = (munf == 5) ? ("summerLogo.gif") : ("defaultLogo.gif");
    imageSrc = (munf == 6) ? ("summerLogo.gif") : ("defaultLogo.gif");

    return imageSrc;
}
4

5 回答 5

1

你有一个逻辑问题。正在发生的事情是,即使找到了正确的月份,所有的比较也会发生。您应该尝试使用 switch...case 方法:

switch(numf) {
    case 9:
    case 8:
    case 10:
        imageSrc = 'fallLogo.gif';
        break;
    case 11:
    case 0:
    case 1:
        imageSrc = 'winterLogo.gif';
        break;
    case 2:
    case 3:
    case 4:
        imageSrc = 'springLogo.gif';
        break;
    case 7:
    case 5:
    case 6:
        imageSrc = 'summerLogo.gif';
        break;
    default:
        imageSrc = 'defaultLogo.gif';
}
于 2013-07-30T15:20:09.747 回答
0

每一项任务都会发生,因此做出的每一个决定都会被下一个决定否决。

例如,假设munf是 9。这条线

imageSrc = (munf == 9) ? ("fallLogo.gif") : ("defaultLogo.gif");

imageSrc"fallLogo.gif"预期设置。但是之后

imageSrc = (munf == 8) ? ("fallLogo.gif") : ("defaultLogo.gif");

也运行,因为munf不是 8,所以它imageSrc再次设置为"defaultLogo.gif"。这也发生在以下每个作业中,因此只有最后一个作业具有明显的效果。

然后您需要做的是避免更改imageSrc回默认值。最接近您的原始代码的是:

function displayBanner(currentDate) {
    var munf = currentDate.getMonth();

    var imageSrc = "defaultLogo.gif";   

    if (munf == 9) {
        imageSrc = "fallLogo.gif";
    }
    if (munf == 8) {
        imageSrc = "fallLogo.gif";
    }
    ...
    return imageSrc;
}

其他答案显示了更简洁的方法,从使用else if,到处理每个条件三个月,再到使用switchwhich 是为这类事情制作的。感谢大家!

另一件事:您可以一次对您的函数运行大量测试,如下所示:

function runTests() {
    var date;

    date = new Date(2013, 0, 1);
    console.assert(displayBanner(date) == 'winterLogo.gif');

    date = new Date(2013, 1, 1);
    console.assert(displayBanner(date) == 'winterLogo.gif');

    date = new Date(2013, 2, 1);
    console.assert(displayBanner(date) == 'springLogo.gif');
    ...
}

这称为单元测试,它对于从代码中排除错误并将它们排除在外非常有用。

于 2013-07-30T16:20:57.177 回答
0

只有最后一个赋值会影响 imageSrc 的最终值,这不是你想要的。

于 2013-07-30T15:15:54.243 回答
0
function displayBanner(currentDate) {

    var munf = currentDate.getMonth();

    var imageSrc = "defaultLogo.gif";

    if ( munf > 7 && munf < 11 ) {
         imageSrc = 'fallLogo.gif';
    } else if ( munf > 10 || munf < 2 ) {
         imageSrc = 'winterLogo.gif';
    } else if ( munf > 1 && munf < 5 ) {
         imageSrc = 'springLogo.gif';
    } else if ( munf > 4 && munf < 8 ) {
        imageSrc = 'summerLogo.gif';
    }

    return imageSrc;
}
于 2013-07-30T15:16:29.203 回答
0

imageSrc 在除七月(最后一行)之外的所有月份都是 defaultLogo.gif。

你最好使用 switch 语句:

switch(munf) {
    case 9:
    case 8:
    case 10:
        return "fallLogo.gif";
    case 11:
    case 0:
    case 1:
        return "winterLogo.gif";
    ...
    default:
        return "defaultLogo.gif";
}
于 2013-07-30T15:18:30.960 回答