从if块内部执行else块

时间:2019-04-02 01:57:49

标签: javascript

在JavaScript中,是否有一种方法可以从if块内跳到else块?

这是一个例子:

if (is_valid) {
  some code;

  if (!something_else_is_valid) {
    // Skip to else to handle error;
  }
} else {
  handle_error_here;
}

我知道我可以将handle_error功能移到另一个功能,但是我不想这么做。

感谢您的回答/评论!

4 个答案:

答案 0 :(得分:2)

从不说从不: -他们会讨厌你这样做,但嘿:

var else_ = false
var if_ = true

IF: 
{
 if(if_){
    console.log("entered IF BLOCK")
    var second = false
    if(!second){
      console.log("exits to ELSE BLOCK")
      else_ = true
      break IF;
      console.log("this will not be executed - its skipped")
    }
 }
}
ELSE: {
  if(!else_) break ELSE;
  console.log("entered ELSE BLOCK")
  
}

相应地标记您的块,然后可以将if块退出到else块中;)

答案 1 :(得分:1)

不,一旦输入了if,就无法回溯,尽管您可以使用is_valid中的false递归调用包含函数:

function doTest(is_valid) {
  if (is_valid) {
    // some code;

    if (!something_else_is_valid) {
      return doTest(false);
    }
  } else {
    // handle_error_here;
  }
}

您也可以使用try/catch(尽管理想情况下例外是例外,而不是控制流构造):

try {
  if (!is_valid) {
    throw new Error();
  }
  // some code;
  if (!something_else_is_valid) {
    throw new Error();
  }
} catch(e) {
  // handle_error_here;
}

比在两个可以调用的函数中处理错误要好得多,但您表示不想这样做。

答案 2 :(得分:1)

  

在JavaScript中,是否可以从if块内跳到else块?

否,因为已经满足该条件,因此无法返回并进入else条件。

您可以使用语句switchbreak关键字停止下游执行。如果something_else_is_valid为假,则不会发生break,因此switch块将到达default情况,即“错误情况”。

function A(is_valid, something_else_is_valid) {
  switch(is_valid) {
    case true: 
      // some code
      if (something_else_is_valid) {
        // do somthing
        break;
      } // else, will reach default case.
    default:
      throw new Error("Wrong!");
      // handle_error_here
  }
}

A(true, false);

答案 3 :(得分:0)

不,您不能-您必须结合条件:

if (is_valid && something_else_is_valid) {
    //Some code
} else {
    handle_error_here();
}