if语句检查多个布尔条件

时间:2017-02-21 03:17:58

标签: javascript if-statement

我有一个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为假(任何先前条件为假)时,跳到evt.preventDefault()行,不会在checkEmpty()函数之后调用其他函数。

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

还有其他方法可以使这项工作吗?

7 个答案:

答案 0 :(得分:3)

尝试逻辑运算符||,即OR

答案 1 :(得分:1)

如果至少有一个条件为False,则它不会进入IF块。对于多个&&声明,一旦收到FALSE,所有其他成功的&&不再检查语句,并返回FALSE。

答案 2 :(得分:1)

如果你

  

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

  

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

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

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

请参阅fiddle demo here

答案 3 :(得分:1)

TypeResolverBuilder
function checkEmpty(val){ return val;}
function _conditioncheck(e){
    if(checkEmpty(false) && checkEmpty(true) && checkEmpty(true) && checkEmpty(true)){ 
	console.log('true....');
	e.preventDefault();
    }
}	

它为我工作。

答案 4 :(得分:0)

它被称为短路。

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

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

他编辑了这个问题。这不再是真的。我正在制作社区维基,这里留下来。

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

答案 5 :(得分:0)

你现在用链式&&运算符做的是说所有这些事情都是真的那么event.preventDefault。如果您确实需要检查每个条件并继续(如果有),那么您应该使用逻辑OR运算符||

答案 6 :(得分:0)

假设你有一个对象数组,你可以试试every函数。

实施例



var array = [];

for (var i = 0; i < 4; i++)
{
  array.push({
    id: i, bool: true
  });
}

function check(item)
{
  return item.bool == true || false;
}

if (array.every(check))
{
  console.log("all true");
}
else
{
  console.log("return false instead");
}



// Just an example of something that is false
array[1].bool = false;

if (!array.every(check))
{
  console.log("something is false");
}
&#13;
&#13;
&#13;