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

Rya*_*yan 42 javascript label loops break nested-loops

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

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

doThis: //Label
doIt();
Run Code Online (Sandbox Code Playgroud)

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

在我看来,这类似于GOTO其他语言的陈述,并将被视为不良做法.假设这个我是对的吗?

tdo*_*bek 47

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
    }
Run Code Online (Sandbox Code Playgroud)

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

  • @Danield在上面的代码中,变量`k`初始化一个块范围变量,其中包含数值`5`:P (7认同)

Sar*_*raz 25

这些是环路断路器标识符.如果你有嵌套循环(循环内部循环)并使用这些标识符,它们是有用的,你可以有条件地指定何时和哪个循环突破.

  • @Ryan:您不需要打破不在循环内的代码。我想你想使用“GO TO”之类的东西。您可以使用“if”来设置条件。 (2认同)

Gal*_*lit 9

Avoid using labels

Labels are not very commonly used in JavaScript since they make programs harder to read and understand. As much as possible, avoid using labels and, depending on the cases, prefer calling functions or throwing an error.

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

  • 该文件于2015年5月从MDN [删除](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/label$compare?locale=en-US&to=805661&from=784289) ,在修订历史中使用[这些注释](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/label$history):*"清除证据不支持删除推荐. " "清理技术评论.我认为没有必要使用大红色标语来阻止标签.没有发现任何不同的内容."* (19认同)
  • 我没有得到“可以使用函数调用代替循环跳转”部分,如何使用函数调用来`继续`循环? (2认同)

Pal*_*pad 5

标记中断可以跳出任何代码块,而不仅仅是循环

<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";
}
Run Code Online (Sandbox Code Playgroud)

结果:

测试 1 通过

测试 2 通过

测试 3 通过

  • 在这种情况下,您只能“中断”而不能“继续” (3认同)