即使第一个条件为假,也要在if语句中检查两个条件。

4

我有两个语句在一个if块中,两个语句都链接到一个将返回布尔值的函数。只有这两个语句都为真,代码才能运行,但即使第一个语句为假,我也希望它们都被检查。相关代码:

if (myFunc(one) && myFunc(two)) {
    //execute
}

在返回false之前,myFunc将执行一些代码,但是如果其中一个if返回false,则不会执行此代码。

我让它工作了,但感觉有点像hack:

if ((myFunc(one) && myFunc(two)) || (myFunc(two) && myFunc(one))) {
    //execute
}

有没有更好的解决方案?谢谢!


在我看来,如果条件语句具有副作用,则编码风格是不好的。逻辑运算符的短路行为通常并不重要,因为条件语句不应具有副作用,因此它们是否被执行都无关紧要。如果您想要有副作用,则应在if之外显式地执行函数,而不是使用逻辑运算符链接。 - deceze
2个回答

4
另一种方法:
var first = myFunc(one),
    second = myFunc(two);

if (first && second) {
    //execute
}

在此情况下,两者都会先执行,然后再检查它们是否为非假值。

1
+1 如果你想要执行两个函数,那就执行两个函数。如此简单。 - deceze
这个有效,谢谢!有人能解释一下如果第一个条件为假,为什么第二个条件会被执行吗? - user2872841
1
@user 呃...因为它明确执行了 myFunc(one)myFunc(two)...?! - deceze

1

请使用 & 运算符。

看一下这个 example

function a (){
    console.log(1);
    return true;
}

function b (){
    console.log(2);
    return false;
}

if(b() & a() == true){
console.log('asas');
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接