什么时候应该在if语句的条件中使用括号?

时间:2014-03-06 14:22:01

标签: javascript jquery

我有这样的if条件:

$(document).ready(function(){
  var name = 'Stack';
  var lastname = 'Overflow';
   if( name == 'Stack' && lastname == 'Overflow' )
   alert('Hi Stacker!');
});

所以我的alert被解雇了......

如果我把条件放在这样的括号内:

 $(document).ready(function(){
  var name = 'Stack';
  var lastname = 'Overflow';
   if( (name == 'Stack') && (lastname == 'Overflow') ){
      alert('Hi Stacker!');
   } 
});

我的alert也被解雇了......

我的问题是:何时以及为什么我应该在if条件中使用括号?谢谢!

8 个答案:

答案 0 :(得分:5)

您的示例没有太大区别。 你可以阅读它作为参考 Operator Precedence (JavaScript)

答案 1 :(得分:2)

你用它来强制关联,在你的例子中,这不会改变任何东西。但请考虑这种情况:

A and B or C 

有很大不同
A and (B or C)

在这里,你将阻止表达式被理解为(A and B) or C,这是javascript和数学做事的自然方式。

答案 2 :(得分:1)

由于运算符优先级:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence

如果您想了解更多详情,请阅读此内容

但基本上==(相等)权重超过&& (逻辑 - 和),因此在A == B给定

之前评估C && D
C <- A == B

D <- E == F

因此,在特定情况下,在C或D中添加括号无关紧要。

答案 3 :(得分:0)

如果需要检查多个条件,可以使用括号。

例如:如果全名为“StackOverflow”,则User也是Stacker,然后使用“Or”运算符添加另一个条件。

if(((name == 'Stack') && (lastname == 'Overflow')) || FullName =='StackOverflow')

如您所见,名称和姓氏放在一个括号内,这意味着它给出结果为true或false,然后它使用FullName条件进行OR运算。

在名称,姓氏和全名字段周围括号是可选的,因为它对条件没有任何影响。但是,如果您使用FullName检查其他条件,则将它们分组到括号中。

答案 4 :(得分:0)

在这种情况下绝不需要括号。 当然,尝试阅读第一个解决方案(没有)和第二个解决方案(带)。第二个,它清晰,快速可读,易于保护。

当然,如果你必须改变优先级(在这种情况下你只有一个AND条件,但如果你需要和AND和OR?1和2或3优先级之间的变化“(1和2)或3” - “1和(2或3)”

答案 5 :(得分:0)

括号()用于对语句进行分组。

前 - 如果你有一个表达式'2 + 3 * 5'

有两种方法可以阅读:(2+3)*52+(3*5)

要根据运算符优先级获得正确的o / p,您必须将正确的表达式组合为*,其优先级高于+,因此正确的表达式将为2+(3*5)

答案 6 :(得分:0)

考虑声明

if( i==10 || j == 11 && k == 12 || l == 13)

你想要的是如果i是10或j是11并且k是12或l是13那么结果应该是真的,但是如果我是10,j是11,k是10,l是13条件将失败,因为方程的命运在k时决定为&amp;&amp;进来了。现在,如果你不希望这发生,就把它放在这个

if( (i==10 || j == 11) && (k == 12 || l == 13))

在此OR中将首先执行,结果将为真。

答案 7 :(得分:0)

第一个括号需要复杂的条件才能确保操作员的优先顺序。让我们举一个例子

   var x=1,y=1,z=0;

    if(x==0 && y==1 || z==0)   
    {
      //always true for any value of x
    }
    what will happen here  
    (0 && 1 ||1) ----> (0 ||1)----->1 
    && has high precedence over ||

    if(x==0 && (y==1 || z==0)) alert('1');
    {
     //correct way
    }
  

如果您不使用(y == 1 || z == 0)括号,则对于任何x值,条件始终为true。

     

但如果你使用(..)条件返回正确的结果。