在javascript中的特定条件下,如何转到else的下一个块?
假设我的条件设置如下:在javascript中的特定条件下,如何转到else的下一个块?,javascript,Javascript,假设我的条件设置如下: if (condition1) { for (var i in objx) { if (objx[i] == 3) { //go to next else if } } } else if(condition2) { ... } 因此,有两种方法可以达到条件2 if语句: 当条件1为false时 循环中的某些内容不符合需要 我本可以把整个if-else放在循环中,但有更多的条件,这只会使代码更难阅读
if (condition1) {
for (var i in objx) {
if (objx[i] == 3) {
//go to next else if
}
}
} else if(condition2) {
...
}
因此,有两种方法可以达到条件2 if语句:
理想情况下:我更喜欢使用break,并在if-else语句中以某种方式继续 使用标记变量,如下所示
// Initial value is `true` because, if `condition1` is falsy, we still have to
// evaluate `condition2` by default.
var flag = true;
if (condition1) {
// `condition1` is truthy, skip `condition2`
flag = false;
for (var i in objx) {
if (objx[i] == 3) {
// We need to check the second condition
flag = true;
// skip rest of the loop
break;
}
}
}
// Evaluate condition2 only if `flag` is set
if (flag && condition2) {
...
}
不能从一个if(else-if)块转到另一个if(else-if)块,但可以将内部检查移动到第一个if。condition1&&conditionFunc(objx)-表示如果condition1为true,则运行func,如果为true,则执行此if块,否则将移动到下一个else if
function conditionFunc(objx) {
for (var i in objx) {
if (objx[i] == 3) {
return false;
}
}
return true;
}
if (condition1 && conditionFunc(objx)) {
} else if (condition2) {
...
}
使用
开关的另一种解决方案:
switch (true) {
case condition1:
var doBreak = true;
for (var i in objx) {
if (objx[i] == 3) {
// go to condition2
doBreak = false;
break;
}
}
if (doBreak) {
break;
}
case condition2:
// ...
}
将代码放入函数中,并在需要时调用它。唯一可能的方法是使用GOTO语句,我想,但这被认为是糟糕的编程实践。如果你能更详细地阐述一下你的目标,那么我们可以向你推荐替代方案。@Pointy我想他想保持代码的原样,只是转移控制权。我对这种逻辑块的实际用途很感兴趣,因为如果你不需要从内部跳转,你会按照@Ori Drori的回答做,并将布尔移到ifelse块之外。这就是我正在做的:如果本地存储中有数据,通过它进行搜索,查看是否有任何数据太过时,如果没有,则返回此数据,否则,如果它已经过时,或者如果本地存储中没有数据,请准备发出ouath请求并获取数据。最后一个if应该是if((flag | | condition 2)和&!condition 1)
@GUL如果condition 1
是真的,标志将已经是假的。