所以说我有一个 if 语句:
if(a=='' || b==''){
//which is true?
}
是否可以确定哪个语句满足 if 语句而不做一个switch
语句或另一个if
语句来检查?
所以说我有一个 if 语句:
if(a=='' || b==''){
//which is true?
}
是否可以确定哪个语句满足 if 语句而不做一个switch
语句或另一个if
语句来检查?
正如其他人所说,您必须单独测试条件,但您可以混合世界。
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
}
}
您可以定义一个令牌来存储条件为真:
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
}
我认为这是做你想做的最简单的方法。
不,您已经明确询问其中一个或两个是否正确。如果没有其他某种条件,就无法确定哪些子表达式为真。
如果您对基于哪种行为正确的不同行为感兴趣,您可能应该将它们与可能常见的位分开,例如
either = false;
if (a == ' ') {
doActionsForA();
either = true;
}
if (b == ' ') {
doActionsForB();
either = true;
}
if (either) {
doActionsForAorB();
}
如果您关心这两个条件中的哪一个是正确的,那么找出答案的唯一方法是分别测试它们,例如
if(a==''){
// ...
}
else if(b=='') {
// ...
}
有时,特别是在更复杂的条件中,如果您存储每个条件的结果并在以后重用它会有所帮助:
var isFoo = a == '';
var isBar = b == '';
// You can now use isFoo and isBar whenever it's convenient
简单的解决方案:
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
}
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
}