在JavaScript中使用标签是不好的做法?

时间:2011-02-05 12:12:14

标签: javascript loops label nested-loops break

我刚刚发现在JavaScript中使用标签,例如:

for (var i in team) {
    if(i === "something") {
        break doThis: //Goto the label
    } else {
        doThat();
    }
}

doThis: //Label
doIt();

直到现在我还没有听说过这个,我在网上找不到太多关于它的信息,我开始认为这是有原因的。

在我看来,这类似于其他语言中的GOTO语句,并且被认为是不好的做法。我是否正确地假设这个?

4 个答案:

答案 0 :(得分:46)

JavaScript中的标签主要用于break,或者在嵌套循环中继续,以便能够打破外部,或者从内部循环内部的代码继续外部循环:

    outer:
    for (let i = 0; i < 10; i++)
    { 
       let k = 5;
       for (let j = 0; j < 10; j++) // inner loop
          if (j > 5) 
               break; // inner 
          else
               continue outer;  // it will go to next iteration of outer loop
    }

如果你使用了没有'outer'标签的continue,它会转到内循环的下一次迭代。这就是Javascript中需要标签的原因。

答案 1 :(得分:24)

这些是环路断路器标识符。如果您有嵌套循环(循环内部循环)并使用这些标识符,它们很有用,您可以有条件地指定何时以及从哪个循环中突破。

答案 2 :(得分:9)

  

避免使用标签

     

标签在JavaScript中并不常用   程序更难阅读和理解。尽可能避免   使用标签,并根据情况,更喜欢调用函数或   抛出错误。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/label

答案 3 :(得分:2)

标记的中断可以突破任何代码块而不仅仅是循环

<p id="test1"></p>
<p id="test2"></p>
<p id="test3"></p>
<p id="test4"></p>
<p id="test5"></p>

test: {                            
    document.getElementById('test1').innerHTML = "test 1 passed";
    document.getElementById('test2').innerHTML = "test 2 passed";
    document.getElementById('test3').innerHTML = "test 3 passed";
    break test;
    document.getElementById('test4').innerHTML = "test 4 passed";
    document.getElementById('test5').innerHTML = "test 5 passed";
}

<强>结果:

测试1通过

测试2通过

测试3通过