我正在javascript中对日期进行比较。在这种情况下,date1为空""
,我可以在firebug中看到相同的内容。根据下面的代码,不应该调用第一个警报,因为date1 == ""
,但由于某种原因,调用了警报alert(" This is called....");
。这有什么不对?
if(date1 != null || date1 != ""){
if( (date1 != null || date2 != "") && (date1 < date2)){
alert(" This is called....");
break;
}
else{
alert(" That is called....");
break;
}
}
上面的if条件在for循环中,因此中断。
答案 0 :(得分:2)
我认为你的意思是在你的第一次比较中使用&&
而不是||
来确保这两个条件都是正确的,并且我认为你在使用date1
时有错字在第二次测试中代替date2
。此外,您可以使用if (date1)
同时排除null
和""
以及undefined
和0
以及NaN
以及任何其他{{1}价值。
我想你想要这样的东西:
falsey
如果你真正要做的是确保if (date1) {
if(date2 && date1 < date2) {
alert(" This is called....");
} else {
alert(" That is called....");
}
break;
}
和date1
是合法的号码,那么我建议你这样做:
date2
或者,如果它们应该是Date对象,那么你可以测试它:
if (typeof date1 == "number") {
if(typeof date2 == "number" && date1 < date2) {
alert(" This is called....");
} else {
alert(" That is called....");
}
break;
}
答案 1 :(得分:1)
对我而言看起来是正确的。由于OR(||),此语句的计算结果为true,因为date1不为null:
if(date1 != null || date1 != ""){
(它简化为if (true || false) {
,这始终是真的。
并且以下语句的计算结果为true,因为“”不等于null,并且可能是date1小于date2:
if( (date1 != null || date2 != "") && (date1 < date2)){
答案 2 :(得分:0)
date1为空
""
看看这个条件:
date1 != null || date1 != ""
date1
!= null
,第二项(date1 != ""
)甚至没有被评估,因为第一项通过 - 并且整个表达式的计算结果为{ {1}}。
此外这个条件:
true
也符合(见上文) - 这次你的意思是date1 != null || date2 != ""
吗?不过,您的date2 != null
会显示出来。在这种情况下,BTW This is called
毫无意义。
最后你可以考虑一下:
break
不等于1:1,但非常接近。
答案 3 :(得分:0)
我想建议你这个语法
if( (x==5) || (x==6) || (x==7) || (x==8) )
这是使用OR
和JavaScript
检查JQuery
条件的最佳答案。
答案 4 :(得分:-1)
也许这是您应该考虑代码可读性的情况。以下是我对您的代码的解释:
if(!isBlank(date1){
if(dateXIsSmallerThanDateY(date1, date2))
alert(" This is called....");
else
alert(" That is called....");
}
function isBlank(date) {
return date != null || date != "";
}
function dateXIsSmallerThanDateY(x,y) {
return (x != null || y != "") && (x < y);
}
你看到dateXIsSmallerThanDateY有问题吗?我能看到一个。那是什么意思:x != null || y != ""
?可能它应该是y != null || y != ""
,而!isBlank(y)
可以缩短为function isNotBlank(date) {
return date == null && date == "";
}
。
此外,isBlank函数不会检查空白。看看它的作用:如果不为null,或者不为空字符串,则认为您的日期为空白。好吧,也许这很难读,所以反过来这个方法:
function isNotBlank(date) {
return date != null && date != "";
}
正面比较更容易阅读。你看到这里发生了什么吗?日期可以为空并且“”在同一时间吗?没有?好。比我猜你知道该怎么做:
function isBlank(date) {
return date == null || date == "";
}
或反过来:
{{1}}