0

所以说我有一个 if 语句:

if(a=='' || b==''){

    //which is true?
}

是否可以确定哪个语句满足 if 语句而不做一个switch语句或另一个if语句来检查?

4

6 回答 6

1

正如其他人所说,您必须单独测试条件,但您可以混合世界。

var test1 = 1 == 1;  // true
var test2 = 2 == 1;  // false

if (test1 || test2) {
  // If either conditions is true, we end up here.
  // Do the common stuff
  if (test1) {
    // Handle test1 true
  }

  if (test2) {
    // Handle test2 true
  }
}
于 2013-08-14T08:44:10.927 回答
1

您可以定义一个令牌来存储条件为真:

var token = null;
if ((a == '' && (token = 'a')) || (b == '' && (token = 'b'))) {
    // Here token has an 'a' or a 'b'. You can use numbers instead of letters
}

我认为这是做你想做的最简单的方法。

于 2013-08-14T08:44:32.340 回答
0

不,您已经明确询问其中一个或两个是否正确。如果没有其他某种条件,就无法确定哪些子表达式为真。

如果您对基于哪种行为正确的不同行为感兴趣,您可能应该将它们与可能常见的位分开,例如

either = false;
if (a == ' ') {
    doActionsForA();
    either = true;
}
if (b == ' ') {
    doActionsForB();
    either = true;
}
if (either) {
    doActionsForAorB();
}
于 2013-08-14T08:42:17.510 回答
0

如果您关心这两个条件中的哪一个是正确的,那么找出答案的唯一方法是分别测试它们,例如

if(a==''){
    // ...
}
else if(b=='') {
    // ...
}

有时,特别是在更复杂的条件中,如果您存储每个条件的结果并在以后重用它会有所帮助:

var isFoo = a == '';
var isBar = b == '';

// You can now use isFoo and isBar whenever it's convenient
于 2013-08-14T08:42:29.230 回答
0

简单的解决方案:

if ((ia=(a=='')) || (b=='')) {
    // ia indicate whether the boolean expression a have been true.
    // ia -> a has been true, b may have, !ia -> b has been true, a has not
}

简单的解决方案中没有ib,因为由于快捷评估,它不会总是被设置。

为了迎合快捷评估尝试:

if (((ia=(a=='') || (ib=(b=='')) && ((ib=(b=='')) || (ia=(a==''))) {
    // ia, ib indicate whether the corresponding boolean expressions have been  true
}
于 2013-08-14T08:45:41.823 回答
0

if(a=='' || b==''){ var x= a || 乙;
//如果 a 是 ''(falsy) x 将是 b,否则 a
}

var phone="";
var email="something";

 if(phone=='' || email==''){

   var x= (phone) ? 'phone':'email';
   console.log(x); //email

}
于 2013-08-14T08:49:53.577 回答