Является ли использование меток в JavaScript плохой практикой? - PullRequest
42 голосов
/ 05 февраля 2011

Я только что узнал об использовании меток s в JavaScript, таких как:

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

doThis: //Label
doIt();

Я не слышал об этом до сих пор, и я не могу найти много информации в Интернете об этом, и я начинаю думать, что есть причина для этого.

Мне кажется, что это похоже на выражение GOTO в других языках и будет считаться плохой практикой. Буду ли я прав, предполагая это?

Ответы [ 4 ]

46 голосов
/ 05 февраля 2011

Метки в 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 нужны ярлыки.

24 голосов
/ 05 февраля 2011

Это идентификаторы прерывателя цикла. Они полезны, если у вас есть вложенные циклы (циклы внутри циклов) и, используя эти идентификаторы, вы можете условно указать, когда и какой цикл прерывать.

9 голосов
/ 17 января 2015

Избегайте использования ярлыков

Метки не очень часто используются в JavaScript, так как они делают программы сложнее читать и понимать. Как можно больше избегайте используя метки и, в зависимости от случаев, предпочитают вызывать функции или выдает ошибку.

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

2 голосов
/ 06 ноября 2017

помеченные разрывы могут выходить из любого блока кода, а не только циклов

<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 пройден

...