Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript逻辑运算符&&;不起作用_Javascript_Angularjs - Fatal编程技术网

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

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

您好,我正在使用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。这怎么可能呢?

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

被评估为好像是写的一样

( "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 );