首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >javascript逻辑运算符&&不工作

javascript逻辑运算符&&不工作
EN

Stack Overflow用户
提问于 2017-04-30 17:09:18
回答 1查看 423关注 0票数 0

您好,我正在调用一个使用angularjs绑定到html元素的函数。此函数包含一个简单的if语句,该语句的计算结果为意外结果。

代码语言:javascript
复制
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,这是可能的吗?

EN

回答 1

Stack Overflow用户

发布于 2017-04-30 17:50:58

加号运算符+>=具有更高的精度,因此此表达式(例如)

代码语言:javascript
复制
"First :"+ reqFirstDate >= dateFilter(scope.minDat, scope.df)

就像它是被编写的一样进行计算。

代码语言:javascript
复制
( "First :"+ reqFirstDate ) >= dateFilter(scope.minDat, scope.df)

这显然不是故意的。

正确使用括号可以让您修复此问题:

代码语言:javascript
复制
"First :"+ ( reqFirstDate >= dateFilter(scope.minDat, scope.df) )

您的代码需要相应地修复console.log行:

代码语言:javascript
复制
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中的逗号,来打印值或(与您的示例一样)标签/变量名和相应的值。

代码语言:javascript
复制
console.log( 'label:', true );

console.log( 'a>b', a>b );
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43704756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档