正确的方法来打破JavaScript中的if块?

时间:2019-06-14 06:31:14

标签: javascript if-statement break

在诸如以下的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的信息,但是我看不到它会增加什么。并且提到该方法可能不会被编译器/解释器有效地使用。

谢谢。

1 个答案:

答案 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();