javascript 逻辑运算符 && 不起作用

标签 javascript angularjs

嗨,我正在使用 angularjs 调用绑定(bind)到 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。这怎么可能?

最佳答案

加号运算符 +>= 具有更高的优先级,因此这个表达式(例如)

"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 表达式中添加额外的括号,因为那里没有歧义:>=&&

如果您认为代码变得更具可读性或者不确定运算符优先级,您可以添加它们。我认为这里的情况并非如此。

参见Javascript Operators Precedence 获取运算符及其优先级的完整列表。

优先级越高意味着首先计算表达式部分。

<小时/>

底部注释:

正如其他人指出的那样,您可以利用在 console.log 中使用逗号 , 来打印值或(如您的情况)标签/变量名称和相应的值。

console.log( 'label:', true );

console.log( 'a>b', a>b );

关于javascript 逻辑运算符 && 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43704756/

相关文章:

javascript - Jquery 在 Chrome 扩展选项页面中验证

javascript - 获取 jQuery 处理复选框单击事件

没有哈希的javascript窗口位置href?

javascript - 围绕范围内的每 6 个对象创建一个包含 div

javascript - AngularJS 输入类型数字与字符串模型

javascript - 只允许一定数量的数字作为小数整数和一定数量的小数的函数

javascript - carousel 插件和 jquery 库不能一起工作

javascript - 使用 API 和 Mongoose 的 AngularJS SPA

javascript - 在 angular.js 中缓存数据的常用方法是什么

javascript - IE8 数据集的替代方案(按数据属性对元素进行排序)