Является ли использование меток в JavaScript плохой практикой?



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



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

doThis: //Label
doIt();


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

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

4 ответов:

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

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

    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 без 'outer' метки, то он перейдет к следующей итерации внутреннего цикла. Вот почему существует потребность в ярлыках в 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 пройден

Comments

    Ничего не найдено.