在嵌套的if语句中调用break

时间:2011-01-31 13:56:21

标签: javascript

我有以下情况:

IF condition THEN  
    IF condition THEN 
        sequence 1
    ELSE
        break //?  
    ENDIF    
ELSE    
    sequence 3    
ENDIF

break语句的结果是什么?它是否打破了外部的if语句?因为这是我真正需要的。

10 个答案:

答案 0 :(得分:110)

如果标记if语句,则可以使用break。

breakme: if (condition) {
    // Do stuff

    if (condition2){
        // do stuff
    } else {
       break breakme;
    }

    // Do more stuff
}

您甚至可以标记和破坏普通块。

breakme: {
    // Do stuff

    if (condition){
        // do stuff
    } else {
       break breakme;
    }

    // Do more stuff
}

虽然它不是常用的模式,但可能会让人感到困惑,并且可能不会被编制者优化。最好使用函数并返回,或者更好地安排条件。

( function() {
   // Do stuff

   if ( condition1 ) {
       // Do stuff 
   } else {
       return;
   }

   // Do other stuff
}() );

答案 1 :(得分:40)

不,没有。 break是for循环,而不是ifs。

嵌套if语句很糟糕。如果可以避免它们,请避免使用它们。你可以将代码重写为

if (c1 && c2) {
    //sequence 1
} else if (c3 && c2) {
   // sequence 3
}

这样你就不需要任何控制逻辑来“突破”循环。

答案 2 :(得分:2)

在大多数语言中,break只会取消像for,while等的循环。

答案 3 :(得分:1)

如果您尝试在if else中使用break;语句,Javascript将抛出异常。它主要用于循环。您可以使用条件“断开”if else语句,这包含“break”语句是没有意义的。

JSFiddle

答案 4 :(得分:1)

但是有开关箱:)

switch (true) {
    case true:
        console.log("Yes, its ture :) Break from the switch-case");
        break;
    case false:
        console.log("Nope, but if the condition was set to false this would be used and then break");
        break;

    default:
        console.log("If all else fails");
        break;
}

答案 5 :(得分:0)

实际上原始问题的示例代码中没有c3。所以if会更恰当

if (c1 && c2) {
    //sequence 1
} else if (!c1 && !c2) {
   // sequence 3
}

答案 6 :(得分:0)

我今天遇到了类似的问题,发现将条件逻辑重构为一个单独的函数来提供帮助。

我发现它比标签更易读,人们对return比对break更满意。内联函数相似,但是缩进可能会造成混淆。

在您的情况下,它看起来像这样。

function doThing() {
  checkConditions();

  // Rest of the code here
}

function checkConditions() {
  if (c1) {
    if (c2) {
      return do1();
    else {
      return;
    }
  } else {
    return do3();
  }
}

答案 7 :(得分:0)

使多个检查语句更具可读性(并避免嵌套if):

var tmp = 'Test[some.email@somewhereouttherebutnothere.com]';

var posStartEmail = undefined;
var posEndEmail = undefined;
var email = undefined;

do {
    if (tmp.toLowerCase().substring(0,4) !== 'test') { break; }

    posStartEmail = tmp.toLowerCase().substring(4).indexOf('[');
    posEndEmail = tmp.toLowerCase().substring(4).indexOf(']');

    if (posStartEmail === -1 || posEndEmail === -1) { break; }

    email = tmp.substring(posStartEmail+1+4,posEndEmail);

    if (email.indexOf('@') === -1) { break; }

// all checks are done - do what you intend to do

    alert ('All checks are ok')

    break; // the most important break of them all

} while(true);

答案 8 :(得分:-1)

只需删除中断。因为如果不执行其他操作,则它已经位于第一个内部。它将退出。

答案 9 :(得分:-2)

你需要它打破外部的if语句。你为什么要使用其他的呢?

IF condition THEN  
    IF condition THEN 
        sequence 1
    // ELSE sequence 4
       // break //?  
    // ENDIF    
ELSE    
    sequence 3    
ENDIF

sequence 4