2017-04-12 20 views
1

私は、次の機能があります:SelectedValが2021のときswitch文が複数のケースを実行するのはなぜですか?

$("#drpType").change(function() { 
    var SelectedVal = this.value; 
    switch (SelectedVal) { 
     case "2021": 
      console.log('a'); 
      console.log('b'); 
     case "2020": 
      console.log('a'); 
     case "ADB": 
      console.log('b'); 
     case "PWP": 
      console.log('c'); 
    } 
} 

なぜ、それがa,b,a,b,cを印刷していますか?

jsfiddleにシナリオを作成しました。今私はあなたに私の質問を理解することができます。 2021を選択すると、2 divを返します。 switch文がfall-thoughtに基づいているのであれば、それでなぜEFGHを選択した場合、3つで1つのdivしか表示されないのでしょうか?

<select id="drpQuotaType" > 
    <option value="0">Select</option> 
    <option value="2021">2021</option> 
    <option value="2020">2020</option> 
    <option value="ABCD">ABCD</option> 
    <option value="EFGH">EFGH</option> 
</select> 

<div id="dv1" style="display:none">Div 1 </div></br> 
<div id="dv2" style="display:none">Div 2 </div></br> 
<div id="dv3" style="display:none">Div 3 </div></br> 
<div id="dv4" style="display:none">Div 4 </div> 


$("#drpQuotaType").change(function() { 
      var SelectedVal = this.value; 
      $('#dv1').hide(); 
      $('#dv2').hide(); 
      $('#dv3').hide(); 
      switch (SelectedVal) { 
       case "2021": 
        $('#dv1').show(); 
        $('#dv2').show(); 
       case "2020": 
        $('#dv2').show(); 
       case "ABCD": 
        $('#dv2').show(); 
       case "EFGH": 
        $('#dv3').show(); 
      } 

}); 
+5

は最後に、ここにあなたのコードがどのように見えるかですOPはbreak'文がのためにあるか '理解している場合にのみ誤植です。開始するときは、 'break'文が必要ないと考えるのが妥当です。 –

+1

@MikeCはいいいえ。それぞれのケースの後に改行する必要があります。 – SAL

+2

両方の回答を評価した場合、申し訳ありませんが、正しいと思います。また、私はMike Cに同意します。いくつかの言語は休止せずに "落ちる"、if文のような他の言語は最初の成功の道をたどって機能します。それは '矛盾する'スタイルの間で人を混乱させる可能性があります。 –

答えて

5

あなたがbreak声明を持っていないためです。それがなければ、コードは「落ちる」でしょう。

var x = 10; 
 
switch (x) { 
 
    case 10: 
 
    console.log('With break'); 
 
    break; 
 
    
 
    case 20: 
 
    console.log('I never run'); 
 
    break; 
 
} 
 

 
console.log('-------'); 
 

 
switch (x) { 
 
    case 10: 
 
    console.log('Without'); 
 
    case 20: 
 
    console.log('a break'); 
 
    case 30: 
 
    console.log('it just'); 
 
    case 40: 
 
    console.log('keeps going'); 
 
}

時にはそれがフォールスルーするのに便利だから、これが存在する理由があります。ゲームの状態を更新している場合や、特定の種類の敵やすべての敵に対して何が起こるかを想像することができます。

var characterType = 'big boss'; 
 

 
switch (characterType) { 
 
    case 'big boss': 
 
    console.log('Update the big boss'); 
 
    
 
    case 'enemy': 
 
    console.log('The big boss is also an enemy so run the basic enemy code'); 
 
    break; 
 
    
 
    case 'player': 
 
    console.log('The boss is not a player so we will not run this.'); 
 
    break; 
 
}

それはフォールスルーを利用するために信じられないほど一般的ではないのですが、それはそのユースケースを持っています。誤字として閉じるように投票されたものと

$("#drpType").change(function() { 
    var SelectedVal = this.value; 
    switch (SelectedVal) { 
     case "2021": 
      console.log('a'); 
      console.log('b'); 
      break; // <-- 

     case "2020": 
      console.log('a'); 
      break; // <-- 

     case "ADB": 
      console.log('b'); 
      break; // <-- 

     case "PWP": 
      console.log('c'); 
      break; // optional. It's visually consistent but doesn't do anything 
    } 
} 
+2

@Downvoterなぜあなたはdownvotedを説明するケア?これはOPが 'break'文が何のためであるのか理解していないように見えるので、質問に答えます。 –

+1

「巨大なボスなら」と入れ子にして「敵か巨大なボス」にもっと優先する理由はありますか?私は、ケース・フォール・スルーがいつも私にとってかなり無意味なものだったので、私は尋ねます。あなたの例が機能するためには、ケースの順序が非常に重要です。 –

+1

@ RegularJoe確かに、このケースは非常に恣意的です。多くの値を持つことができるケースがあります(可能な数値型のリストを列挙する列挙子を想像してください文字列型など)。同様に、あなたの状況に合わせて読む方が良いかもしれません。 [ここでは、フォールスルー使用の良い例がいくつかあります。](http://softwareengineering.stackexchange.com/questions/116221/using-uses-of-fallthrough-switch-statements) –

6

あなたはあなたの例ごとに、あなたのbreak;文が欠落しています

$("#drpType").change(function() { 
    var SelectedVal = this.value; 
    switch (SelectedVal) { 
     case "2021": 
      console.log('a'); 
      console.log('b'); 
      break; 
     case "2020": 
      console.log('a'); 
      break; 
     case "ADB": 
      console.log('b'); 
      break; 
     case "PWP": 
      console.log('c'); 
      break; 
    } 
+3

何ですか?私は何かをdownvoteしなかった... – Lixus

+2

@ DanBeaulieuそれはすぐに両方とも-1だったので、両方の答えをdownvoted非常に可能性が高いです。いずれにしても、平均的なユーザーがダウンした人を知ることはできません。 –

+2

@DanBeaulieuは-2が彼に対して行われた。あなたはダウンボウティングのために-1を得る(編集:誰にも見せられない)。 –

関連する問題