Javascript 为什么我的if语句总是计算为true?

Javascript 为什么我的if语句总是计算为true?,javascript,if-statement,Javascript,If Statement,我需要检查一年中的几个月,看看这个月的最后一天是28日、29日、30日还是31日。我的问题是,第一个if语句的计算结果始终为true: MOIS_I = 31 if (mois == "Janvier" || "Mars" || "Mai" || "Juillet" || "Août" || "Octobre" || "Décembre" || "1" || "3" || "5" || "7" || "8" || "10" || "12" || "01" || "03" || "05" || "

我需要检查一年中的几个月,看看这个月的最后一天是28日、29日、30日还是31日。我的问题是,第一个if语句的计算结果始终为true:

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!");
    }
测试4、测试100、测试400用来测试一年是否是闰年(也就是说二月有29天而不是28天)


谢谢大家!

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


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

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


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

以下是我将如何处理它:

  • 获取月份并将其转换为数字。您可能需要使用散列来完成此操作
  • 获取年份并将其转换为数字,如您所做的那样使用
    parseInt()
  • 如果
    月份%2==1
    ,则为奇数月:
    • 如果
      year%400==0 | | year%100==0 | | | year%4==0
      :适当处理闰年
    • 其他:返回30
  • 否则:这是一个偶数月,返回31

  • 以下是我将如何着手的:

  • 获取月份并将其转换为数字。您可能需要使用散列来完成此操作
  • 获取年份并将其转换为数字,如您所做的那样使用
    parseInt()
  • 如果
    月份%2==1
    ,则为奇数月:
    • 如果
      year%400==0 | | year%100==0 | | | year%4==0
      :适当处理闰年
    • 其他:返回30
  • 否则:这是一个偶数月,返回31
  • 这样做(简单的方法)

    这将给每个月的最后一天

    这样做(简单的方法)


    这将给出一个月的最后一天

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

    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 ");
    }
    

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

    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 ");
    }
    

    这里有一个缩短您的
    if()
    条件的建议:RegExp对象(尽管这不会回答您的问题)

    同样的

    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 (
    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"
    )
    

    同样的

    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 (
    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"
    )
    

    这里有一个缩短您的
    if()
    条件的建议:RegExp对象(尽管这不会回答您的问题)

    同样的

    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 (
    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"
    )
    

    同样的

    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 (
    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"
    )
    

    这似乎不需要复杂的日期数学:

    var SomeDate = new Date(2012, 10);  // November, 2012
    
    SomeDate.setDate(SomeDate.getDate() - 1);  // go back one day
    
    var DaysInMonth = SomeDate.getDate();
    

    这似乎不需要复杂的日期数学:

    var SomeDate = new Date(2012, 10);  // November, 2012
    
    SomeDate.setDate(SomeDate.getDate() - 1);  // go back one day
    
    var DaysInMonth = SomeDate.getDate();
    

    什么语言?这有点重要。看起来可能是JavaScript,但请注意,
    const
    在标准JavaScript中尚未出现。请注意,非空字符串将始终计算为true,因此
    如果(/*任何条件|*/“此处的任何字符串”)
    将始终返回true。但是,值null、false本身、未定义和空字符串将计算为false。什么语言?这有点重要。看起来可能是JavaScript,但请注意,
    const
    在标准JavaScript中尚未出现。请注意,非空字符串将始终计算为true,因此
    如果(/*任何条件|*/“此处的任何字符串”)
    将始终返回true。但是,值null、false本身、未定义和空字符串将计算为false.interest。就在几天前,我正在读关于闰年的书,我学到了一些我不知道的东西,所以我想与大家分享。有一个例外,很有趣。就在几天前,我正在读关于闰年的书,我学到了一些我不知道的东西,所以我想与大家分享。一个例外是。这是我的第一个javascript作业,这似乎是正确的,但我还没有完成。这是我的第一个javascript作业,这似乎是正确的,但我还没有完成。