javascript逻辑运算符&&;不起作用
您好,我正在使用angularjs调用绑定到html元素的函数。此函数包含一个简单的if语句,该语句的计算结果为意外结果javascript逻辑运算符&&;不起作用,javascript,angularjs,Javascript,Angularjs,您好,我正在使用angularjs调用绑定到html元素的函数。此函数包含一个简单的if语句,该语句的计算结果为意外结果 scope.submit=function(){ var reqFirstDate = dateFilter(scope.date.first, scope.df); var reqSecondDate = dateFilter(scope.date.second, scope.df); var reqThirdDate = dateFilter(scope.da
scope.submit=function(){
var reqFirstDate = dateFilter(scope.date.first, scope.df);
var reqSecondDate = dateFilter(scope.date.second, scope.df);
var reqThirdDate = dateFilter(scope.date.third, scope.df);
console.log("First :"+ reqFirstDate >= dateFilter(scope.minDat, scope.df)); // prints: true
console.log("Second: "+ reqSecondDate >= dateFilter(scope.minDat, scope.df));// prints: true
console.log("Third :" + reqThirdDate >= dateFilter(scope.minDat, scope.df));// prints : true
console.log("Final condition: "+reqFirstDate >= dateFilter(scope.minDat, scope.df) && reqSecondDate >= dateFilter(scope.minDat, scope.df) && reqThirdDate >= dateFilter(scope.minDat, scope.df)); // prints: false
if (reqFirstDate >= dateFilter(scope.minDat, scope.df) && reqSecondDate >= dateFilter(scope.minDat, scope.df) && reqThirdDate >= dateFilter(scope.minDat, scope.df)) {
//doSomething
}
}
最终条件的计算结果为false。这怎么可能呢?加号运算符
+
比=
具有更高的优先级,因此此表达式(例如)
被评估为好像是写的一样
( "First :"+ reqFirstDate ) >= dateFilter(scope.minDat, scope.df)
这显然不是有意的
正确使用括号可以解决此问题:
"First :"+ ( reqFirstDate >= dateFilter(scope.minDat, scope.df) )
您的代码需要相应地修复控制台.log
行:
console.log("First :" + ( reqFirstDate >= dateFilter(scope.minDat, scope.df ) ) );
console.log("Second: "+ ( reqSecondDate >= dateFilter(scope.minDat, scope.df) ) );
console.log("Third :" + ( reqThirdDate >= dateFilter(scope.minDat, scope.df ) ) );
console.log("Final condition: " + ( reqFirstDate >= dateFilter(scope.minDat, scope.df) && reqSecondDate >= dateFilter(scope.minDat, scope.df) && reqThirdDate >= dateFilter(scope.minDat, scope.df) ) );
请注意,如果表达式中没有括号,则不需要在中插入额外的括号:=
在&
之前计算
如果您认为代码可读性更强,或者不确定运算符优先级,则可以添加它们。我认为这里不是这样
有关运算符及其优先级的完整列表,请参见
更高的优先级意味着首先计算表达式部分
底部注释:
正如其他人指出的,您可以利用控制台.log中的逗号,
打印值或(如您的情况)标签/变量名和相应的值
console.log( 'label:', true );
console.log( 'a>b', a>b );
尝试将它们括起来:)在if中的那些条件。尝试添加括号-“最终条件:“+reqFirstDate
是与dateFilter(scope.minDat,scope.df)
进行比较的全部内容。它可能已经读取了(reqFirstDate>=dateFilter(scope.minDat,scope.df)&&reqSecondDate)>=dateFilter(scope.minDat,scope.df)@Niet the Dark Absol尝试了这个方法(reqFirstDate>=dateFilter(scope.minDat,scope.df))&&(reqSecondDate>=dateFilter(scope.minDat,scope.df))&&(reqThirdDate>=dateFilter(scope.minDat,scope.df)),但打印了false。尝试一下,检查失败的原因:console.log(reqFirstDate>=dateFilter(scope.minDat,scope.df),reqSecondDate>=日期过滤器(scope.minDat,scope.df),reqThirdDate>=日期过滤器(scope.minDat,scope.df),日期过滤器(scope.minDat,scope.df),reqFirstDate,reqSecondDate,reqThirdDate)
console.log( 'label:', true );
console.log( 'a>b', a>b );