web-dev-qa-db-ja.com

JavaScriptでラベルを使用することは悪い習慣ですか?

JavaScriptでのlabelの使用について、次のようなことがわかりました。

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

doThis: //Label
doIt();

今までこれについて聞いたことがなく、オンラインでそれについて多くの情報を見つけることができず、その理由があると私は考え始めています。

これは他の言語のGOTOステートメントに似ており、悪い習慣と見なされるように思えます。私はこれを仮定するのが正しいでしょうか?

43
Ryan

これらはループブレーカー識別子です。ネストされたループ(ループ内のループ)があり、これらの識別子を使用している場合は、いつ、どのループから脱出するかを条件付きで指定できます。

25
Sarfraz

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でラベルが必要なのはそのためです。

49
tdobek

ラベルの使用を避ける

ラベルは、プログラムを読みにくくして理解しにくくするため、JavaScriptではあまり使用されません。可能な限り、ラベルの使用を避け、場合によっては、関数の呼び出しまたはエラーのスローを優先します。

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

9
Gal Margalit

ラベル付きブレークは、ループだけでなくanyコードのブロックから抜け出すことができます

<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に合格

2
Pall Arpad