网上找的一段验证日期字符串是否正确的js代码。function validateCNDate( strValue ) { 
  var objRegExp = /^\d{4}(\-|\/|\.)\d{1,2}\1\d{1,2}$/ 
  if(!objRegExp.test(strValue)) 
     return false; 
  else
  { 
     var arrayDate = strValue.split(RegExp.$1); 
     var intDay = parseInt(arrayDate[2],10); 
     var intYear = parseInt(arrayDate[0],10); 
     var intMonth = parseInt(arrayDate[1],10);      if(intMonth > 12 || intMonth < 1) { 
        return false; 
      }      var arrayLookup = { '1' : 31,'3' : 31, '4' : 30,'5' : 31,'6' : 30,'7' : 31, 
'8' : 31,'9' : 30,'10' : 31,'11' : 30,'12' : 31}      if(arrayLookup[parseInt(arrayDate[1])] != null)  { 
        if(intDay <= arrayLookup[parseInt(arrayDate[1])] && intDay != 0) 
            return true; 
       }      if (intMonth-2 ==0) { 
        var booLeapYear = (intYear % 4 == 0 && (intYear % 100 != 0 || intYear % 400 == 0)); 
        if( ((booLeapYear && intDay <= 29) || (!booLeapYear && intDay <=28)) && intDay !=0) 
            return true; 
      } 
    } 
  return false; 
  }这里最后一个return false不会把前面的return true覆盖了吗?
希望大家予以解答。

解决方案 »

  1.   

    回答这个问题很高兴,原因-----楼主的结贴率很高     正文:首先可能您还不明白 return 关键字的意思,return 关键字为跳出方法,意思就是只要执行了return 
    语句,则方法结束
        所以一个方法只有一个出口,就是renturn ,您前面执行了return true 则方法直接结束,不会执行到最后的return false
      

  2.   

    楼上正解!代码可以改成这样子:
    function validateCNDate( strValue ) { 
      var bool = null;
      var objRegExp = /^\d{4}(\-|\/|\.)\d{1,2}\1\d{1,2}$/ 
      if(!objRegExp.test(strValue)) 
         bool = false;
      else
      { 
         var arrayDate = strValue.split(RegExp.$1); 
         var intDay = parseInt(arrayDate[2],10); 
         var intYear = parseInt(arrayDate[0],10); 
         var intMonth = parseInt(arrayDate[1],10);      if(intMonth > 12 || intMonth < 1) { 
            bool = false;
          }      var arrayLookup = { '1' : 31,'3' : 31, '4' : 30,'5' : 31,'6' : 30,'7' : 31, 
    '8' : 31,'9' : 30,'10' : 31,'11' : 30,'12' : 31}      if(arrayLookup[parseInt(arrayDate[1])] != null)  { 
            if(intDay <= arrayLookup[parseInt(arrayDate[1])] && intDay != 0) 
                bool = true;
           }      if (intMonth-2 ==0) { 
            var booLeapYear = (intYear % 4 == 0 && (intYear % 100 != 0 || intYear % 400 == 0)); 
            if( ((booLeapYear && intDay <= 29) || (!booLeapYear && intDay <=28)) && intDay !=0) 
                bool = true;
          } 
        } 
        return bool; 
      }
    这样理解应该会好一点
      

  3.   

    return 就是跳出了当前函数了。下面有多少个return都不会执行到的
      

  4.   


    这样会有问题的  如果 if(!objRegExp.test(strValue)) 为真   if (intMonth-2 ==0) 也为真  就逻辑错误了
      

  5.   

    如此说来,这里var arrayLookup = { '1' : 31,'3' : 31, '4' : 30,'5' : 31,'6' : 30,'7' : 31, 
    '8' : 31,'9' : 30,'10' : 31,'11' : 30,'12' : 31}      if(arrayLookup[parseInt(arrayDate[1])] != null)  { 
            if(intDay <= arrayLookup[parseInt(arrayDate[1])] && intDay != 0) 
                return true; 
           }      if (intMonth-2 ==0) { 
            var booLeapYear = (intYear % 4 == 0 && (intYear % 100 != 0 || intYear % 400 == 0)); 
            if( ((booLeapYear && intDay <= 29) || (!booLeapYear && intDay <=28)) && intDay !=0) 
                return true; 
          } 
    第二个IF里的return永远不会执行啊
      

  6.   

    如果第一个renturn 了 第二个就永远不会执行
      

  7.   

    呵呵,的确可以结贴了,return之后,的确是不会走函数的后面部分了