2011-02-05 1 views
34

私はちょうどのような、ラベルのJavaScriptでを使用して知った:私は今までこのことについて聞いたことがないと私はそれについてオンライン多くの情報を見つけることができないと私は考え始めていJavaScriptでラベルを使用していますか?

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

doThis: //Label 
doIt(); 

それには理由があります。

これは他の言語のGOTO文と似ており、悪い習慣とみなされるようです。私はこれを前提に正しいでしょうか?

+5

ラベルの使用が間違っている:あなたは、あなたのループ構造にすなわち 'doThisをラベルを追加する必要があります(...' – Christoph

+5

はまた**使用していないため** ' hasOwnProperty'は間違いなく悪い習慣です。参照してください:http://bonsaiden.github.com/JavaScript-Garden/#hasownproperty –

+1

@IvoWetzel継承されないオブジェクトの場合は、 'hasOwnProperty'を使用しないでください。 'Object'プロトタイプには何も列挙できません。 – ZachB

答えて

21

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

+0

ああ、ループの中にないコードに分解することはできませんか? – Ryan

+1

@ Ryan:ループ内にないコードを壊す必要はありません。あなたは 'GO TO'のようなものを使いたいと思っています。代わりに 'if'を使って条件を設定することができます。 – Sarfraz

+0

'ネストされたループを持っていると便利です.'​​ループ内に' switch'ステートメントがあり、 'break'キーワードを使って制御します。 – amn

41

ラベルをブレークで主に使用され、または外側を破る、または内側のループ内のコードから外側のループを続けることができるようにネストされたループで継続されています

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 
    } 

続行使用した場合'outer'ラベルがなければ、内側ループの次の反復に向かいます。そのため、Javascriptでラベルが必要です。彼らは読んで理解する プログラム難しく以来

+3

ちょっと疑問....上記のコードで変数 'k'は何をするのですか? – Danield

+1

ところで、letはecmascript 6/ecmascript 2015キーワードです。 https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Statements/let –

+0

@Danield何もありません。 – Walf

10

避け使ってラベル

ラベルは非常に一般的にJavaScriptで使用されていません。可能な限り ラベルを使用しないでください。ケースによっては、エラーが発生する を呼び出すことをお勧めします。

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

+12

そのテキストは削除されました(https://developer.mozilla.org/en-US/docs)。 2015年5月にMDNから[これらのコメント](https://developer.mozilla.org/en-US/docs)(ウェブ/ JavaScript /リファレンス/ステートメント/ラベル$比較ロケール= en-US&to = 805661&from = 784289)/Web/JavaScript/Reference/Statements/label $ history):* "明確な証拠によってサポートされていない推薦を削除する" "技術レビューをクリアする。ラベルを駄目にする大きな赤いバナーは必要ないというのは事実だと思う.Haventは違う言葉を見つけた」* – TachyonVortex

+0

アップデートありがとう! –

+1

それは本当のラベルです、gotoは削除されますhttp://es5.github.io/#x12.12 –

0

ラベルされたコードのいずれかのブロックだけではなく、

<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

トンをEST 2渡さ渡さ

テスト3

関連する問題