我刚刚了解到在JavaScript中使用label,如:
for (var i in team) {
if(i === "something") {
break doThis: //Goto the label
} else {
doThat();
}
}
doThis: //Label
doIt();
直到现在我才听说过这个,而且我在网上找不到太多关于它的信息,我开始认为这是有原因的。
在我看来,这与其他语言中的
GOTO
语句类似,会被认为是不好的做法。我的假设正确吗?
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
}
如果您使用不带“外部”标签的 continue,它将进入内部循环的下一次迭代。这就是 Javascript 中需要标签的原因。
这些是循环断路器标识符。如果您有嵌套循环(循环内的循环)并使用这些标识符,您可以有条件地指定何时以及从哪个循环中断,它们非常有用。
2020年编辑, 根据MDN:
带标签的循环或块非常罕见。通常,函数调用 可以用来代替循环跳转。
我2015年的答案:
避免使用标签
标签在 JavaScript 中并不是很常用,因为它们使得 程序更难阅读和理解。尽可能避免 使用标签,并且根据情况,更喜欢调用函数或 抛出错误。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/label
带标签的中断可以突破任何代码块,而不仅仅是循环
<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通过
有一种解决方法可以使用 while 循环代替内部 for 循环,以获得更好的可读性。