Javascript 没有所有的“if”和“else”语句,有没有更有效的方法来实现这一点?

Javascript 没有所有的“if”和“else”语句,有没有更有效的方法来实现这一点?,javascript,performance,if-statement,Javascript,Performance,If Statement,您将如何更有效地对此进行编程 if( randomYear%4==0 ) { if( randomYear%100==0 ) { if( randomYear%400==0 ) { randomDay = 1 + Math.floor(Math.random()*29); } else { randomDay = 1 + Math.floor(Math.random()*28);

您将如何更有效地对此进行编程

if( randomYear%4==0 ) { 
    if( randomYear%100==0 ) {
        if( randomYear%400==0 ) {
            randomDay = 1 + Math.floor(Math.random()*29);
        }
        else {
            randomDay = 1 + Math.floor(Math.random()*28);
        }
    else{
        randomDay = 1 + Math.floor(Math.random()*29);
    }
else{
    randomDay = 1 + Math.floor(Math.random()*28);
}
首先,我使用math.floor,因为它包括0,不包括1,这就是我要找的。其目的是确定变量“randomYear”是否为闰年,以及是否在2月份有合适的天数

我主要关心所有的if和else语句。顺便说一句,我使用的是Javascript。 非常感谢你

这个怎么样

var maxDays = 28;
if (randomYear%4 == 0 && (randomYear%100 != 0 || randomYear%400 == 0)) {
    maxDays = 29;
}
randomDay = 1 + Math.floor(Math.random() * maxDays);
这个怎么样

var maxDays = 28;
if (randomYear%4 == 0 && (randomYear%100 != 0 || randomYear%400 == 0)) {
    maxDays = 29;
}
randomDay = 1 + Math.floor(Math.random() * maxDays);

如果您同意包含第三方库,请尝试此库:

你可以这样做:

moment([2000]).isLeapYear() 

检查2000年是否是闰年,然后可以执行适当的逻辑。此外,您还可以检查某一年的2月29日是否存在或未使用其验证api。

如果您同意包含第三方库,请尝试此库:

你可以这样做:

moment([2000]).isLeapYear() 

检查2000年是否是闰年,然后可以执行适当的逻辑。您还可以使用验证api检查某一年的2月29日是否存在。

您甚至不需要数学:

var tmp = new Date(year,1,29); // attempt to get February 29th
isleapyear = (tmp.getMonth() == 1);

你甚至不需要数学:

var tmp = new Date(year,1,29); // attempt to get February 29th
isleapyear = (tmp.getMonth() == 1);

你可以按照下面给出的方法来做

function isLeapYear(year){
  return !(year%400) || ((year%100 > 0) && !(year%4)) ;
}

function getRandomDay(year){
  return 1 + Math.floor(Math.random()* (isLeapYear(year)?29:28))
}

var day = getRandomDay(2000);

就性能而言,它可能不会做出重大改变。但这是一种用更少的行数编写有组织的可重用代码的方法。

您可以按如下所示进行操作

function isLeapYear(year){
  return !(year%400) || ((year%100 > 0) && !(year%4)) ;
}

function getRandomDay(year){
  return 1 + Math.floor(Math.random()* (isLeapYear(year)?29:28))
}

var day = getRandomDay(2000);

就性能而言,它可能不会做出重大改变。但这是用较少的行数编写有组织的可重用代码的方法。

使用日期类型,它可以为您完成所有这一切。您还可以将1+Math.floor替换为Math。ceil@jcsanyi-不,您不能:Math.random可能返回0。@nnnnnn-您是对的。谢谢。使用日期类型,它可以为您完成所有这些。您还可以将1+Math.floor替换为Math。ceil@jcsanyi-不,您不能:Math.random可能返回0。@nnnnnn-您是对的。谢谢。或者另一个选项:var maxDays=randomYear%4==0&&randomYear%100!=0 | |随机年份%400==0?29 : 28;如果要这样做,为什么不全力以赴:randomDay=1+Math.floorMath.random*randomYear%4==0&&randomYear%100!=0 | |随机年份%400==0?29 : 28;+1.或者另一个选项:var maxDays=randomYear%4==0&&randomYear%100!=0 | |随机年份%400==0?29 : 28;如果要这样做,为什么不全力以赴:randomDay=1+Math.floorMath.random*randomYear%4==0&&randomYear%100!=0 | |随机年份%400==0?29 : 28;这对我来说似乎是众所周知的正确方式。在给定年份的2月初后29天创建一个日期,然后确定结果日期是否仍在2月,这是一个很好的解决方案,它依赖于JavaScript已经知道关于闰年、时区等的大量细节。,等等。这似乎是众所周知的对我正确的方式。在给定年份的2月初后29天创建一个日期,然后找出结果日期是否仍在2月是一个很好的解决方案,这取决于JavaScript已经知道了大量关于闰年、时区等的细节。