web-dev-qa-db-ja.com

JavaScriptスイッチステートメントでOR演算子を使用する

私はJavaScriptでswitchステートメントをやっています:

switch($tp_type){

    case 'ITP':
    $('#indv_tp_id').val(data);
    break;

     case 'CRP'||'COO'||'FOU':
    $('#jurd_tp_id').val(data);
    break;

}

OR演算子を使用すると機能しないと思います。JavaScriptでこれを正しく行うにはどうしたらいいですか?ITPを選択した場合、ITPを取得します。ただし、COO、FOU =のいずれかを選択した場合、 OR CRP私は常に最初のCRPを取得します。助けてください、ありがとう!

28
Wern Ancheta

次のように書き直す必要があります。

case 'CRP':
case 'COO':
case 'FOU':
  $('#jurd_tp_id').val(data);
  break;

switch リファレンスに記載されていることがわかります。間にcasesがない連続するbreakステートメントの動作(「フォールスルー」と呼ばれます)がそこに記述されています。

各ケースラベルに関連付けられたオプションのbreakステートメントは、一致したステートメントが実行されるとプログラムがスイッチから抜け出し、switchに続くステートメントで実行を継続することを保証します。 breakを省略した場合、プログラムはswitchステートメントの次のステートメントから実行を継続します

バージョンが最初のアイテム(CRP)に対してのみ機能する理由については、式'CRP'||'COO'||'FOU''CRP'に評価されるためです(ブールコンテキストでは空でない文字列はtrueに評価されるため)。つまり、caseステートメントは、一度評価されたcase 'CRP':と同等です。

82
Mat