有3段JS代码,分别如下:
   代码一:
   var d1=new Date("2011","04","01");
   var d2=new Date("2011","03","31");
   if(d1<=d2){
.....
   }
   代码二:
   var d1=new Date("2011","04","01");
   var d2=new Date("2011","03","31");
   if(d1<d2 || d1==d2){
.....
   }
   代码三:
   var d1=new Date("2011","04","02");
   var d2=new Date("2011","04","01");
   if(d1<d2 || d1==d2){
.....
   }
   三段代码执行的结果是:代码一中if里面的代码被执行了,而代码二、三中if里面的代码没被执行,求解这是为什么?

解决方案 »

  1.   

    区别在||符号上,或的意思,d1<d2 || d1==d2,如果d1<d2成立,将不会去判断d1==d2。
      

  2.   

    d1和d2比较的是什么?对象的地址,还是Date对象自己拥有的方法,按照时间的大小比较,没看明白。
      

  3.   

    明白了,Date对象没有你写的构造函数,即使这样创建了一个Date对象,他把里边的年月日参数忽略掉了,得到的依然是当前的日期对象,所以二者是相等的。
      

  4.   


    对象类型能比较,转换成数字比较
    alert(d1.getFullYear() + "-" + d1.getMonth() + "-" + d1.getDate());
    还有日期的月份好像要少1,也就是从0开始的,0-11
      

  5.   

    月份从0开始,所以因为
    第一个
     var d1=new Date("2011","04","01");
      var d2=new Date("2011","03","31");4月没有31了,就成了5月一号,所以d1与d2表示 的日期相同 推测不一样的原因是:
    <= 判断   < 时会自动d1.valueOf()方法转化 为int了,然后返回false,比较=时,两个int值相等,返回true第二个结果   <,时两个值不相等,返回false,==时,两个对象指向不同的引用,所以也返回false
      

  6.   

    八楼这一句似乎说的不对?“第二个结果   <,时两个值不相等,返回false,==时,两个对象指向不同的引用,所以也返回false”===时比较的才是引用的地址,而==操作符比较的应该是等同性。
      

  7.   


    var d1=new Date("2011","04","01");
    var d2=new Date("2011","04","01");
    if(d1==d2){
    alert("ok");
    }类似上边的代码,应该弹出ok才对,可是没有。。
      

  8.   

    用getTime()取得时间值后再比较吧,这样准确