这个JavaScript函数有什么问题?

这个JavaScript函数有什么问题?,javascript,Javascript,我通常不使用JavaScript,也不明白为什么这不起作用。谢谢 function testYear() { var dObject = new Date(); var dRegEx = /^[0-9][0-9]00$/; var d = dObject.getFullYear(); if (d.match(dRegEx) && d % 400 == 0) { alert("The year "+d+" is in fact a leap

我通常不使用JavaScript,也不明白为什么这不起作用。谢谢

function testYear() {
    var dObject = new Date();
    var dRegEx = /^[0-9][0-9]00$/;
    var d = dObject.getFullYear();

    if (d.match(dRegEx) && d % 400 == 0) {
    alert("The year "+d+" is in fact a leap year!");
    //return true;
    }
    else if(!(d.match(dRegEx) && d % 400) && d % 4 == 0) {
    alert("The year "+d+" is in fact a leap year!");
    //return true;
    }
    else {
    alert("The year "+d+" is not a leap year.");
    //return false;
    }
}

如果要将全年与正则表达式匹配,则应为字符串:

var d = ''+dObject.getFullYear();

例如。

这里不需要使用正则表达式。只需使用一个普通的整数算法,看看年份是否可以被100整除:

if (d % 100 === 0 && ...)
顺便说一下,如果
d%400==0
d%100==0
自动为真,因此不需要额外的测试


如果一年可以被400整除,或者可以被4整除,但不能被100整除,那么一年在公历中就是一年。请尝试以下方法:

if ((d % 400 === 0) || (d % 4 === 0 && d % 100 !== 0))
{
    // is leap year
}

d
是一个数字。要使用
match
方法,它必须是一个字符串。将其转换为字符串的最简单方法是向其添加空字符串:

var d = dObject.getFullYear() + '';

顺便说一下,您应该查看如何查看JavaScript控制台,因为相关错误将记录在那里。这将极大地帮助您追踪问题,或者至少确定问题所在。

忘记正则表达式吧,这里的方法是错误的。当整个函数可以(几乎)用一行代码替换时,我不想费心去弄清楚到底是什么错了,但是
d
是一个数字,所以不能对它使用
match()
。你不需要测试它是否可以被100整除,也可以被400整除——后者意味着前者

function testYear() {
   var year = (new Date()).getFullYear();

   if (year % 400 === 0 || (year % 4 === 0 && year % 100 != 0)) {
      alert("The year " + year + " is in fact a leap year!");
      //return true;
   } else {
      alert("The year "+year+" is not a leap year.");
      //return false;
   }

   // OR, if you don't need the alerts and only care about the
   // return value you can just do this:
   return year % 400 === 0 || (year % 4 === 0 && year % 100 != 0);
}

另外,我不知道正则表达式是否正确。我也从未使用过它们。我希望在我的网页上点击一个按钮时,会看到关于今年是闰年的警告;2011年不是闰年。为什么您希望看到一个警报说它是?@PaulTomblin我不知道,但为了测试,我将把d的值设置为某个值。