您好,我正在调用一个使用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.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.How,这是可能的吗?
发布于 2017-04-30 17:50:58
加号运算符+比>=具有更高的精度,因此此表达式(例如)
"First :"+ reqFirstDate >= dateFilter(scope.minDat, scope.df)就像它是被编写的一样进行计算。
( "First :"+ reqFirstDate ) >= dateFilter(scope.minDat, scope.df)这显然不是故意的。
正确使用括号可以让您修复此问题:
"First :"+ ( reqFirstDate >= dateFilter(scope.minDat, scope.df) )您的代码需要相应地修复console.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) ) );请注意,不需要在if表达式中加上额外的括号,因为其中没有明确性:>=在&&之前求值。
如果你认为你的代码变得更具可读性,或者你不确定操作符的优先级,你可以它们。我不认为这里是这样的。
有关运算符及其优先级的完整列表,请参见。
较高的优先级意味着首先计算表达式部分。
底注:
正如其他人指出的那样,您可以利用console.log中的逗号,来打印值或(与您的示例一样)标签/变量名和相应的值。
console.log( 'label:', true );
console.log( 'a>b', a>b );https://stackoverflow.com/questions/43704756
复制相似问题