Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/418.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript中的特定条件下,如何转到else的下一个块?_Javascript - Fatal编程技术网

在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语句:

  • 当条件1为false时
  • 循环中的某些内容不符合需要
  • 我本可以把整个if-else放在循环中,但有更多的条件,这只会使代码更难阅读和遵循。第二,我考虑最终尝试goto和label方法,但有人认为,按照这种方式goto将过时


    理想情况下:我更喜欢使用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
    是真的,
    标志将已经是
    假的。