在诸如以下的if块结构中,假设condition_1和condition_2是互斥的,但是有时condition_2和更高版本的条件都可以成立;并且,当condition_2为true时,所需要做的就是冲破if块并继续执行其余代码,类似于switch语句。
除condition_2外,所有条件都是matches
语句,用于具有多个按钮的父容器上的侦听器。如果condition_2为true,则应禁用其下方的按钮。
if ( condition_1 ) { }
else if ( condition_2 ) { }
else if ( condition_3 ) { }
else if ( condition_4 ) { }
// ...
else if ( condition_n ) { };
// More code in the function before returning.
它可以编码为:
if ( condition_1 ) { }
else if ( !condition_2 && condition_3 ) { }
else if ( !condition_2 && condition_4 ) { }
// ...
else if ( !condition_2 && condition_n ) { };
// More code in the function before returning.
或
if ( condition_1 ) { }
else if ( !condition_2 )
{
if ( condition_3 ) { }
else if ( condition_4 ) { }
// ...
else if ( condition_n ) { };
};
// More code in the function before returning.
仅像在第一个块中那样编码,而在condition_2的花括号之间不放置任何代码,将是一种“不好的”编程习惯,这样,当condition_2为true时,没有代码可以执行,但其他条件未经测试并在if块的末尾获取代码?
有没有更好的更专业的方法来完成相同的任务?
我读过有关将label
放在if语句上,然后使用break label
的信息,但是我看不到它会增加什么。并且提到该方法可能不会被编译器/解释器有效地使用。
谢谢。
答案 0 :(得分:5)
如果条件为true
,则可以取labeled statement并破坏block statement{}
。
var a = 2;
block: {
if (a === 1) {
console.log(1);
break block;
}
if (a === 2) {
console.log(2);
break block;
}
if (a === 3) {
console.log(3);
break block;
}
console.log('end of block');
}
或者在相同范围内采用另一个嵌套函数,并尽早返回。
function check () {
if (a === 1) {
console.log(1);
return;
}
if (a === 2) {
console.log(2);
return;
}
if (a === 3) {
console.log(3);
return;
}
console.log('end of function');
}
var a = 2;
check();