• ベストアンサー

jsで、比較演算子が使用可なのはif文だけ?

javascriptで、比較演算子が使用可なのはif文だけ? だとするとifには致命的な欠点があり、 結果(返り値)のパターンが真偽のどちらかになります。 switch文などのように、2つ以上のパターンに分けることはできません。 どれも一長一短で使い物にならないですネ。ヽ(`Д´)ノプンプン

質問者が選んだベストアンサー

  • ベストアンサー
回答No.7

おまけ、AとBが、確実にbooleanである保証があるなら、 <script> let a=5; let b=5; let c=(a==b)*100; console.log(c); </script> ちょっと気持ち悪いコードだが、 本来 a==bはbooleanだが、JavaScriptは、それに対して演算するとintになるので、 ↑の例は、c=a==b?100:0;と等価になる。。 ならば、さっきのサンプルは、 switch(a+b*2) ~ でも行けるかもね。 ローカルデバッガーで試したら、 let ans=true+true;の答えは「2」になってるので、 こんだけでも、行けるのは、確認した。 (パニックになるのでこのやり方はお勧めできないが) 一応、時にbooleanはただの数字でもあるってのを 覚えておくといつか役に立つかもね! (他の言語には「型」があるのでエラーだろうが、  これができるのはJavaScript位の物だろうな~) では~がんばって!

sembokulove
質問者

補足

難しくなるので、やめときます。

その他の回答 (6)

回答No.6

#5さんまいど! -- f( A && B ) { 結果A1 結果A2 結果A3 }else if(A){ 結果B1 結果B2 結果B3 }else if(B) { Bだけが真の場合 結果C1 結果C2 結果C3 どちらも偽の場合 結果D1 結果D2 結果D3 } -- ならば、それを数字に置き換えればいい function test(A,B) { switch(A?1:0 | B? 2:0) { case 0: /* どちらも偽の場合 */ return ["結果D1","結果D2","結果D3"]; case 1: /* Aだけが真の場合 */ return ["結果B1","結果B2","結果B3"]; case 2: /* Bだけが真の場合 */ return ["結果C1","結果C2","結果C3"]; case 3: /* AもBも真の場合 */ return ["結果A1","結果A2","結果A3"]; } /* 2ビットは0~3までしかないので、defaultは不要 */ } let ans=test(false,false); ←ここを好きに書き換えて、テスト console.log(ans); まず、return は複数の値は返せます。 また、switchで一度に複数の条件を設定することも可能です。 これは、他の言語でも使えます。論理演算子と三項演算子を 使用した例になります。 B? 2:0 これは、 if (B==true) return 2; else return 0; を数字にしたものです。0か2しか返さないので、 これは「ビット1」と扱い、それを論理演算させたものを switchにセレクター値として渡すことで、 4種の判定を一度のswitchでifなしで行っています。 また、返り値が「3個ある」との事なので、 一度のreturn で「3個の返り値」を同時に返しています。 try it.

  • t_ohta
  • ベストアンサー率38% (5238/13706)
回答No.5

return で値を複数返したいなら配列で返せばいいんじゃなですか。 JavaScript以外の言語でも出来る事は同じだと思います。

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.4

> 申し訳ございませんが違います。 何がどう違うのでしょうか?

sembokulove
質問者

補足

僕のイメージだと、 A01とB01が合致する条件の場合に、180、1600 A01とB02が合致する条件の場合に、200、1800 A02とB01が合致する条件の場合に、220、2000 A02とB02が合致する条件の場合に、240、2200という風にしたいのですが、これは、どの関数を使ってもダメ、 if文だと、まず、180と1600が返り値として出てくることはできないし、 switch文だと、A01だったら、A01しか条件式を作れず、A01とB01が合致したらといった具合のパターンは作れず、セレクトボックス1個の時の選択状態しかできません。ヽ(`Д´)ノプンプン

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.3

あと、値が真偽値と確定していてtrueとfalse以外あり得なくて、その組み合わせで4分岐したいなら、 switch( A+"-"+ B){ case "true-true": ~~; break; case "true-false": ~~; break; case "false-true": ~~; break; case "false-false": ~~; break; default: 何らかのバグがで真偽値以外が入っていた; } みたいな書き方もします。

sembokulove
質問者

補足

個人的には switch文でも構いませんが、 switch文って確か、 条件式を2つつけることは不可能でしたよね。 あなたが挙げられた例だと、 A01とB01が合致する条件の場合に、180、1600 A01とB02が合致する条件の場合に、200、1800 A02とB01が合致する条件の場合に、220、2000 A02とB02が合致する条件の場合に、240、2200といった具合にはできないです。 if文だと、まず、180と1600が返り値として出てくることはできないし、 switch文だと、A01だったら、A01しか条件式を作れず、A01とB01が合致したらといった具合のパターンは作れず、セレクトボックス1個の時の選択状態しかできません。ヽ(`Д´)ノプンプン

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.2

もしかして、 If( A && B ) { 両方が真の場合 }else if(A){ Aだけが真の場合 }else if(B) { Bだけが真の場合 }else{ どちらも偽の場合 } のような多重分岐を見たことが無いと言うことでしょうか? 普通に何処でも使われているので、珍しい物では無いですが。

sembokulove
質問者

補足

申し訳ございませんが違います。 If( A && B ) { 結果A1 結果A2 結果A3 }else if(A){ 結果B1 結果B2 結果B3 }else if(B) { Bだけが真の場合 結果C1 結果C2 結果C3 どちらも偽の場合 結果D1 結果D2 結果D3 } という漢字です。

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.1

> javascriptで、比較演算子が使用可なのはif文だけ? いいえ。 式が書けるところならば何処にでも書けます。

sembokulove
質問者

補足

ようするに異なる2つのセレクトボックスで、value値がa01のものと、b01のものと値を2つ選びます。 そうすると、仮に if文であれば、(a01&&b01)という、複数条件ができるのはifだけとなります。 これは、ifだけの特徴であり、 他のswitch文などではできません。 しかし、そのif文の欠点は結果(返り値)が2つしか取れません。 ifの特徴もswitchの特徴も兼ね備えたものはjavascriptにはなく、javaとか何かほかのプログラムの出番になるでしょうか。ヽ(`Д´)ノプンプン。

関連するQ&A