• ベストアンサー

ショートカット演算(短絡演算)について

ショートカット演算(短絡演算) 以下の❶❷は意味的に等価です。 ◉リスト2-31 logical2.js if (x === 1) { console.log('こんにちは'); } ← ❶ x ===1 && console.log('こんにちは'); ← ❷ 上記は おそらく左がx=1ではないという仮定なので、左側がfalseになりこの時点で右側は実行されないので下記の二つは同じということだと思いますか?

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

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

>その自動的とはショートカットの事かもしれませんが、前述したとおり論理式と条件によって「ショートカットする場合、ショートカットしない場合」が有ります。 下記を実行してみれば、「&&」と「||」の挙動の違いが分かりますよ。 <html> <head> <meta http-equiv="Content-Type" content="Text/HTML; charset=Shift_JIS"> </head> <script type="text/javascript"><!-- p = prompt("数字を入力して下さい。", ""); x = parseInt(p, 10); x ===1 && console.log('「x ===1 && console.log(~)」が実行されました。'); x ===1 || console.log('「x ===1 || console.log(~)」が実行されました。'); // --></script> </html>

noname#226032
質問者

お礼

if (x === 1) { console.log('こんにちは'); } ← ❶ もしxが数値の1だったらこんにちはと出す。 x ===1 && console.log('こんにちは'); ← ❷ xが数値の1かつ、こんにちだったら?? &&はかつ、andの意味と聞いていますが、この場合もこの意味でしょうか?

その他の回答 (5)

回答No.6

>下記を実行してみれば、「&&」と「||」の挙動の違いが分かりますよ。 下記はループさせてますので、より分かりやすいと思います。 <html> <head> <meta http-equiv="Content-Type" content="Text/HTML; charset=Shift_JIS"> </head> <script type="text/javascript"><!-- while(true){ p = prompt("数字を入力して下さい。", ""); if(p==null){ break; } // 「prompt」がキャンセルされた時の処理。 x = parseInt(p, 10); x ===1 && console.log('「x ===1 && console.log(~)」が実行されました。'); x ===1 || console.log('「x ===1 || console.log(~)」が実行されました。'); } // --></script> </html>

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

> 確かに右側は関係ありませんでした。下記のように訂正します。 > > X==側がtrueであれば、右側の影響は請けず条件式全体が、自動的にtrueになる。 > X==側がfalseであれば、右側の影響は請けず条件式全体が、自動的にfalseになる。 > 必ず左と条件式全体が、同じになるということ。 全くの間違いです。 左辺 && 右辺 ・・・・・・・ 左辺が真なら全体は右辺と同じ、左辺が偽なら右辺を評価せず全体も偽 左辺 || 右辺 ・・・・・・・ 左辺が真なら右辺を評価せず全体が真で、左辺が偽なら全体が右辺と同じ です。 このレベルのことは入門書にきちんと書いてあるはずなのですが。

回答No.3

>X==側がtrueであれば、右側は自動的にtrueになる。 >X==側がfalseであれば、右側は自動的にfalse になる。 >必ず左右が同じになるということ。 >「||」演算子でも同様です。 > >というのが間違えなのですか? >教科書にあるんですが? 間違えです、実際にプログラムを作ってみては? その説明は変です、その自動的とはショートカットの事かもしれませんが、前述したとおり論理式と条件によって「ショートカットする場合、ショートカットしない場合」が有ります。

noname#226032
質問者

お礼

確かに右側は関係ありませんでした。下記のように訂正します。 X==側がtrueであれば、右側の影響は請けず条件式全体が、自動的にtrueになる。 X==側がfalseであれば、右側の影響は請けず条件式全体が、自動的にfalseになる。 必ず左と条件式全体が、同じになるということ。 「||」演算子でも同様です。

回答No.2

下記の認識は間違っています。 >X==側がtrueであれば、右側は自動的にtrueになる。 ↑この場合、右側は自動的にtrueになりません。 >X==側がfalseであれば、右側は自動的にfalse になる。 ↑この場合、右側は自動的にfalseになりません。 >「||」演算子でも同様です。 よって このショートカットの場合、「||」演算子と「&&」演算子では当然 挙動が違います。 ざっくりと説明すると。 >x ===1 && console.log('こんにちは'); ↑この場合、「x ===1」の式がfalseなら、(「console.log('こんにちは')」の式の帰り値が「true、false」に関係なく、この論理演算式「x ===1 && console.log('こんにちは')」はfalseに確定しショートカットするので)「console.log('こんにちは')」の式は「評価されない(つまり実行されない)」。 「x ===1」の式がtrueなら、(この論理演算式「x ===1 && console.log('こんにちは')」は「console.log('こんにちは')」の式の帰り値に依存するので、ショートカットせずに)「console.log('こんにちは')」の式も「評価される(つまり実行される)」。 >x ===1 || console.log('こんにちは'); ↑この場合、「x ===1」の式がtrueなら、(「console.log('こんにちは')」の式の帰り値が「true、false」に関係なく、この論理演算式「x ===1 || console.log('こんにちは')」はtrueに確定しショートカットするので)「console.log('こんにちは')」の式は「評価されない(つまり実行されない)」。 「x ===1」の式がfalseなら、(この論理演算式「x ===1 || console.log('こんにちは')」は「console.log('こんにちは')」の式の帰り値に依存するので、ショートカットせずに)「console.log('こんにちは')」の式も「評価される(つまり実行される)」。

noname#226032
質問者

お礼

X==側がtrueであれば、右側は自動的にtrueになる。 X==側がfalseであれば、右側は自動的にfalse になる。 必ず左右が同じになるということ。 「||」演算子でも同様です。 というのが間違えなのですか? 教科書にあるんですが?

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

仮定は特になくて、xが1の時とそうでないときにそれぞれlogが実行されたりしなかったりする点が同じだと言うことです。

noname#226032
質問者

お礼

X==側がtrueであれば、右側は自動的にtrueになる。 X==側がfalseであれば、右側は自動的にfalse になる。 必ず左右が同じになるということ。 「||」演算子でも同様です。

関連するQ&A