Javascript if语句检查多个布尔条件
我有一个if语句,它必须为每个条件调用函数checkEmpty()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') && /
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()
调用之前添加了!!
)。