我有以下情况:
IF condition THEN
IF condition THEN
sequence 1
ELSE
break //?
ENDIF
ELSE
sequence 3
ENDIF
break语句的结果是什么?它是否打破了外部的if语句?因为这是我真正需要的。
答案 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)
嵌套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”语句是没有意义的。
答案 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