web-dev-qa-db-fra.com

L'utilisation d'étiquettes dans JavaScript est-elle une mauvaise pratique?

Je viens de découvrir l'utilisation d'étiquettes en JavaScript, telles que:

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

doThis: //Label
doIt();

Je n'en ai pas entendu parler jusqu'à présent et je ne trouve pas beaucoup d'informations en ligne à ce sujet et je commence à penser qu'il y a une raison à cela.

Il me semble que cela ressemble à une instruction GOTO dans d'autres langues et serait considéré comme une mauvaise pratique. Aurais-je raison de supposer cela?

43
Ryan

Ce sont des identifiants de rupture de boucle. Ils sont utiles si vous avez des boucles imbriquées (boucles à l'intérieur des boucles) et en utilisant ces identifiants, vous pouvez spécifier conditionnellement quand et de quelle boucle sortir.

25
Sarfraz

Les étiquettes en JavaScript sont utilisées principalement avec break, ou continuent dans des boucles imbriquées pour pouvoir casser le externe, ou continuer la boucle externe à partir du code à l'intérieur de la boucle interne:

    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
    }

Si vous utilisiez continue sans étiquette 'externe', cela irait à la prochaine itération de boucle interne. C'est pourquoi il y a un besoin d'étiquettes en Javascript.

49
tdobek

Évitez d'utiliser des étiquettes

Les étiquettes ne sont pas très utilisées en JavaScript car elles rendent les programmes plus difficiles à lire et à comprendre. Dans la mesure du possible, évitez d'utiliser des étiquettes et, selon les cas, préférez appeler des fonctions ou lancer une erreur.

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

9
Gal Margalit

les ruptures étiquetées peuvent sortir de tout bloc de code pas seulement des boucles

<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";
}

résultat:

test 1 réussi

test 2 réussi

test 3 réussi

2
Pall Arpad