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已经知道了大量关于闰年、时区等的细节。