为什么我的if语句总是评估为true?

时间:2012-11-10 16:38:02

标签: javascript if-statement

我需要经历一年中的几个月,看看这个月的最后一天是28,29,30还是31.我的问题是第一个if语句总是评估为真:

MOIS_I = 31
if (mois == "Janvier" || "Mars" || "Mai" || "Juillet" || "Août" || "Octobre" || "Décembre" || "1" || "3" || "5" || "7" || "8" || "10" || "12" || "01" || "03" || "05" || "07" || "08") {
            window.alert("Le mois " + mois + " de l'année " + annee + " compte " + MOIS_I + " jours ");
}

此外,似乎有必要做if (mois == "Janver" || mois == "Février" || ... )等等,但我想知道是否有更好的方法来做到这一点。

以下是完整代码:

    var mois, annee, test4, test100, test400;
    const MOIS_P = 30;
    const MOIS_I = 31;
    const FEV_NORM = 28; 
    const FEV_BISSEX = 29;
    const TEST_4 = 4;
    const TEST_100 = 100;
    const TEST_400 = 400;

    mois = window.prompt("Entrez un mois de l'année", "");
    annee = window.prompt("Entrez l'année de ce mois", "");
    /* MOIS IMPAIRS */
    if (mois == "Janvier" || "Mars" || "Mai" || "Juillet" || "Août" || "Octobre" || "Décembre" || "1" || "3" || "5" || "7" || "8" || "10" || "12" || "01" || "03" || "05" || "07" || "08") {
            window.alert("Le mois " + mois + " de l'année " + annee + " compte " + MOIS_I + " jours ");
    /* MOIS PAIRS */
    } else if (mois == "Février" || "Avril" || "Juin" || "Septembre" || "Novembre" || "2" || "4" || "6" || "9" || "11" || "02" || "04" || "06" || "09") { 
        if (mois == "Février") {
            test4 = parseInt(annee) % TEST_4;
            test100 = parseInt(annee) % TEST_100;
            test400 = parseInt(annee) % TEST_400;
            if (test4 == 0) {
                if (test100 != 0) {
                    window.alert("Le mois " + mois + " de l'année " + annee + " compte " + FEV_BISSEX + " jours ");
                } else {
                    window.alert("Le mois " + mois + " de l'année " + annee + " compte " + FEV_NORM + " jours ");
                }
            } else if (test400 == 0) {
                    window.alert("Le mois " + mois + " de l'année " + annee + " compte " + FEV_BISSEX + " jours ");
            } else {
                window.alert("Le mois " + mois + " de l'année " + annee + " compte " + FEV_NORM + " jours ");
            }
        } else {
            window.alert("Le mois " + mois + " de l'année " + annee + " compte " + MOIS_P + " jours ");
        }           
    } else {
        window.alert("Apocalypse!");
    }

TEST_4,TEST_100,TEST_400将测试年份是否为闰年(这意味着2月份有29天而不是28天)。

谢谢!

6 个答案:

答案 0 :(得分:2)

这样做(简单的方法)

var last_day=new Date(year,month,-1).getDate()

这将给出月中的最后一天

答案 1 :(得分:0)

if语句而言,是的,您总是需要添加mois ==部分,否则您将检查字符串“Fevrier”的布尔值,而不是将其与mois变量进行比较值。

就您尝试实现的一般结果而言,标准库中可能有许多更简单的方法可供您使用。如果这是JavaScript,请参阅例如this article

答案 2 :(得分:0)

以下是我的意思:

  1. 获取月份并将其转换为数字。您可能希望使用哈希来执行此操作。
  2. 获取年份并使用parseInt()将其转换为数字。
  3. 如果month % 2 == 1,则为奇数月份:
    • 如果year % 400 == 0 || year % 100 == 0 || year % 4 == 0:适当处理闰年。
    • 否则:返回30。
  4. 其他:它是偶数个月,返回31。

答案 3 :(得分:0)

以下是if()条件的缩短建议: RegExp对象(虽然这不会回答您的问题)。

/^(Janvier|Mars|Mai|Juillet|Août|(Octo|Décem)bre|0?[13578]|1[02])$/.test(mois))
// append i after the last forward slash if you want it not to respect case

相同
if (
mois == "Janvier" || mois == "Mars" || mois == "Mai" || mois == "Juillet" ||
mois == "Août" || mois == "Octobre" || mois == "Décembre" || mois == "1" ||
mois == "3" || mois == "5" || mois == "7" || mois == "8" || mois == "10" ||
mois == "12" || mois == "01" || mois == "03" || mois == "05" || mois == "07" ||
mois == "08"
)

if (/^(Février|Avril|Juin|(Sept|Nov)embre|0?[2469]|11)$/.test(mois))
// same thing about the case-insensitive (i) flag here...

相同
if (
mois == "Février" || mois == "Avril" || mois == "Juin" || mois == "Septembre" ||
mois == "Novembre" || mois == "2" || mois == "4" || mois == "6" || mois == "9" ||
mois == "11" || mois == "02" || mois == "04" || mois == "06" || mois == "09"
)

答案 4 :(得分:0)

这似乎没有棘手的日期数学:

var SomeDate = new Date(2012, 10);  // November, 2012

SomeDate.setDate(SomeDate.getDate() - 1);  // go back one day

var DaysInMonth = SomeDate.getDate();

答案 5 :(得分:-1)

这是检查一大堆字符串的更好方法。您将所有允许的名称放在一个对象(通常称为地图)中,然后您可以使用一行代码检查名称是否在地图中:

var names = {
    "Janvier": true, "Mars": true, "Mai": true, "Juillet": true, 
    "Août": true, "Octobre": true, "Décembre": true, 
    "1": true, "3": true, "5": true, "7": true, "8": true, "10": true, "12": true, 
    "01": true, "03": true, "05": true, "07": true, "08": true
};

if (names[mois] === true) {
     window.alert("Le mois " + mois + " de l'année " + annee + " compte " + MOIS_I + " jours ");
}