如果声明使用按位AND运算符强制进行评估

时间:2014-06-23 17:16:38

标签: javascript if-statement bitwise-operators

我有几个独立的函数,根据其他条件返回true或false。当它们全部返回true时我想要一个动作发生,但是我想要运行所有函数而不管有多少返回false。如果我只是想检查所有函数是否返回true,我会使用:

if (func1() && func2() && func3() ){
    //Some code
}

问题在于,如果其中一个函数返回false,则右边的所有函数都不会执行。我之前没有尝试过的一种方法是在if表达式中使用Bitwise AND Operators(&),它看起来像:

if (func1() & func2() & func3() ){
    //Some code
}

我已经对这种方法进行了简单的测试,但它似乎产生了预期的结果,但我找不到其他地方使用的这种方法,我想知道是否有任何理由可以产生意想不到的结果?

还有一个很好的理由不使用这种方法比较函数的结果吗?

4 个答案:

答案 0 :(得分:3)

如果他们只是返回布尔值真/假操作,那么它将按预期工作:

if (true & false & true) 

只是“假”。

但如果他们转向(比如说)整数,那么你会得到意想不到的结果:

if (10 & 100 & 32)

将是

if (b1010 & b1100100 & b100000)

并评估为假。

答案 1 :(得分:2)

只要函数仅返回truefalse,使用&运算符就没有问题。对于那个特定情况(作为操作数的布尔值和作为布尔值计算的整个结果),它与&&运算符完全相同,只是不进行短路评估。

(如果函数返回数值10,它也会起作用。这就是在操作之前将truefalse值转换为的值。 )

答案 2 :(得分:-1)

您可以使用以下内容。

(func1() || func2() || func3()) && otherAction()

它被称为短路。

答案 3 :(得分:-2)

  

问题在于,如果其中一个函数返回false,则右边的所有函数都不会执行

这不是问题。 if条件检查true / false,如果使用&&时传入的值之一是假值,则条件短路并且不会执行其余的语句。

这是&&

的全部目的