Является ли использование меток в JavaScript плохой практикой?
Я только что узнал об использовании меток s в JavaScript, таких как:
for (var i in team) {
if(i === "something") {
break doThis: //Goto the label
} else {
doThat();
}
}
doThis: //Label
doIt();
Я не слышал об этом до сих пор, и я не могу найти много информации в Интернете об этом, и я начинаю думать, что есть причина для этого.
Мне кажется, что это похоже на GOTO
Заявление на других языках и будет считаться плохой практикой. Буду ли я прав, предполагая это?
5 ответов
Это идентификаторы прерывателя цикла. Они полезны, если у вас есть вложенные циклы (циклы внутри циклов) и, используя эти идентификаторы, вы можете условно указать, когда и какой цикл прерывать.
Метки в JavaScript используются главным образом с разрывом или продолжаются во вложенных циклах, чтобы иметь возможность разорвать внешний цикл, или продолжить внешний цикл из кода внутри внутреннего цикла:
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
}
Если вы использовали продолжить без "внешней" метки, она перешла бы к следующей итерации внутреннего цикла. Вот почему в Javascript нужны ярлыки.
Избегайте использования ярлыков
Метки не очень часто используются в 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 для лучшей читабельности.