Javascript if语句检查多个布尔条件

Javascript if语句检查多个布尔条件,javascript,if-statement,Javascript,If Statement,我有一个if语句,它必须为每个条件调用函数checkEmpty() function checkFormFilled(evt){ var isFilled; if(checkEmpty('id1', 'class1') && //condition 1 checkEmpty('id2', 'class2') && //condition 2 checkEmpty('id3', 'class3') && /

我有一个if语句,它必须为每个条件调用函数checkEmpty()

function checkFormFilled(evt){
    var isFilled;
    if(checkEmpty('id1', 'class1') && //condition 1
       checkEmpty('id2', 'class2') && //condition 2
       checkEmpty('id3', 'class3') && //condition 3
       checkEmpty('id4', 'class4')){ //condition 4
       evt.preventDefault();
       isFilled = true;
    }
    return isFilled;
}
问题是当条件1为false(前面的任何条件都为false)时,会跳到evt.preventDefault()行,不会调用下面的其他checkEmpty()函数

我想在所有条件都返回true时调用evt.preventDefault()


是否有其他方法可以实现这一点?

尝试逻辑运算符
|
,它是或如果至少有一个条件为False,它将不会进入If块。对于多个&&statement,一旦收到FALSE,所有其他后续&&statement将不再检查,并返回FALSE。

其称为短路

1-在由&&组成的条件检查中,如果第一个元素的计算结果为false,则忽略所有剩余条件,并为整个条件返回false

2-在由| |组成的条件检查中,如果第一个元素的计算结果为true,则忽略所有剩余条件,并为整个条件返回true


他编辑了这个问题。这不再是事实。我要让它成为社区维基,留下来

最好的解决方法是在条件检查中使用
|
或重新排序子条件序列,以便在需要时测试其他元素。

如果需要

必须为每个条件调用函数checkEmpty()

function checkFormFilled(evt){
    var isFilled;
    if(checkEmpty('id1', 'class1') && //condition 1
       checkEmpty('id2', 'class2') && //condition 2
       checkEmpty('id3', 'class3') && //condition 3
       checkEmpty('id4', 'class4')){ //condition 4
       evt.preventDefault();
       isFilled = true;
    }
    return isFilled;
}

我想在所有条件都返回true时调用evt.preventDefault()

如果确定
checkEmpty()
返回布尔值,则可以使用以下运算符:

function checkEmpty(x) {
  console.log('checkEmpty called for ' + x);

  return false;
}
if(checkEmpty('..1', '....') & //condition 1
   checkEmpty('..2', '....') & //condition 2
   checkEmpty('..3', '....') & //condition 3
   checkEmpty('..4', '....')){ //condition 4
  console.log('inside if');
}
输出:

checkEmpty called for ..1
checkEmpty called for ..2
checkEmpty called for ..3
checkEmpty called for ..4

请参阅。

您现在对链式
&&
操作符所做的操作是,如果所有这些都是真的,那么
事件.preventDefault
。如果您确实需要检查每一个条件,并且如果有任何条件为真,则应使用逻辑
运算符
|

假设您有一个对象数组,您可以尝试
every
函数

范例

var数组=[];
对于(变量i=0;i<4;i++)
{
array.push({
我,布尔:是的
});
}
功能检查(项目)
{
return item.bool==true | | false;
}
if(数组.每个(检查))
{
console.log(“全部为真”);
}
其他的
{
log(“返回false”);
}
//这只是一个错误的例子
数组[1]。bool=false;
如果(!array.every(检查))
{
log(“有些东西是假的”);
}
函数checkEmpty(val){return val;}
函数_条件检查(e){
如果(checkEmpty(false)&&checkEmpty(true)&&checkEmpty(true)&&checkEmpty(true)){
console.log('true…');
e、 预防默认值();
}
}

这正是您要做的,问题出在哪里?当第一个条件1为false时,它会跳到evt.preventDefault()行。在调用evt.preventDefault()行之前,我需要调用所有四个条件。这是因为AND运算符在第一个false之后关闭。您需要一个OR运算符。@Haemish这可以进行更多优化!什么是
?@ibrahimmahrir它只是一个字符串。注意:如果
checkEmpty()
可能返回除
true
false
以外的内容,请不要使用
&
,因为它是位运算符。例如:
1和10
返回
0
,如果它是一个逻辑运算符(因为
truthy&&truthy
true
)。另外,如果你不知道
checkEmpty()
是否总是返回布尔值,你可以对它们进行双重否定:
如果(!!checkEmpty(“…1',“…”)&!!checkEmpty(“…2',“…”)…
(注意在每次
checkEmpty()
调用之前添加了
!!
)。