- ベストアンサー
JavaScriptの演算子「!」についての質問
- JavaScriptの演算子「!」について質問があります。
- 具体的には、スロットを作るコードの「if(!$DR[1] && !$DR[2] && !$DR[3])」についてです。
- 「$DR[1]かつ$DR[2]かつ$DR[3]が動作中なら」という意味だと思うのですが、違いますか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 >!$DR[1] && !$DR[2] && !$DR[3] && !$gameover >はドラムの停止(false)を否定(!)するわけですから、つまりtrueとなって、「ドラムが止まっているとき」ではなく「ドラムが回っているとき」ではないか、ということです。 ドラムの状態を否定するのではなく変数の中身の真偽値を否定します。 (プログラムはドラムの状態がfalseの場合に動いているか、止まっているかはわかりません) trueだったら動いている、falseだったら止まっているというのはこっちが定義していることです。 notに置き換えるとわかりやすいかな? if ( $DR[1] ) {} if ( $DR[1] === true ) {} この二つ同義で$DR[1]がtrue(ドラムが動作状態)であるかの条件式です。 if ( !$DR[1] ) {} if ( $DR[1] === false ) {} こちらの二つも同じで$DR[1]がfalse(ドラムが停止状態)であるかの条件式です。 よって if ( !$DR[1] && !$DR[2] && !$DR[3] ) {} は全てのドラムが停止状態であるかをチェックする条件式になります。
その他の回答 (3)
- gorusura
- ベストアンサー率59% (25/42)
まだ勘違いがありますよ。 ! と false は 違います。 true に 評価される値 ('' や 1 オブジェクトなど) は false 、 false に 評価される値 (0 false null undefined NaN だけ?) は true です。
お礼
お答えいただきありがとうございました。 http://okwave.jp/qa/q8282492.html こちらにて解決しました。
補足
すいません、 いろいろなサイトを回ってみると、また混乱してきたので、 もう一度質問を新しくたてたいと思います。
- LancerVII
- ベストアンサー率51% (1060/2054)
こんにちは。 >つまり、 >if(!$DR[1] && !$DR[2] && !$DR[3]){ >の条件式は、少し前に書かれている、 >$DR[1] = $DR[2] = $DR[3] = false; >の影響を受けないということでしょうか。 いや、条件式としては受けますけど、どの行のこと言っていますか? 以下が抜粋ですがこの部分のことでしたら if が実行されるのはGetStart()が呼ばれた後です。 プロブラムは上から実行していきますが、関数になっている場合は任意に呼ばれた時になります。 動きとしては実行開始時に全てのリールを停止状態にし、ゲーム開始時に全てのリールが停止状態か チェックしているんだと思います。 /* ------------------------------------------ ドラムの状態を示す 変数配列 -------------------------------------------- */ var $DR = new Array(); $DR[1] = $DR[2] = $DR[3] = false; /* ------------------------------------------ ゲーム開始関数 状況把握とゲーム開始 -------------------------------------------- */ function GetStart(){ if(!$DR[1] && !$DR[2] && !$DR[3] && !$gameover){
お礼
お答えいただきありがとうございました。 http://okwave.jp/qa/q8282492.html こちらにて解決しました。
補足
お返事ありがとう御座います。 すいません、私の説明が下手でうまく伝わっていないようです。 私が言ってる行はLancerVIIさんのおっしゃったところです。状態とゲーム開始の部分です。 プログラムを実行すると、 $DR[1] = $DR[2] = $DR[3] = false; でドラムは停止状態(false)になりますよね。 これが読み込まれた後にスタートボタンを押すわけですから、 function GetStart(){ if(!$DR[1] && !$DR[2] && !$DR[3] && !$gameover){ の !$DR[1] && !$DR[2] && !$DR[3] && !$gameover はドラムの停止(false)を否定(!)するわけですから、つまりtrueとなって、「ドラムが止まっているとき」ではなく「ドラムが回っているとき」ではないか、ということです。 よろしくお願いします。
- LancerVII
- ベストアンサー率51% (1060/2054)
こんにちは。 全ソースを見ていないのですが $DR[1],$DR[2],$DR[3]が動作中かどうかを示す状態を真偽値で保持するものだとした場合 true:動作中 false:停止中 if(!$DR[1] && !$DR[2] && !$DR[3]){ は trueの否定ですのでfalseになります。 よって DR[1]かつDR[2]かつDR[3]が停止中(false)なら になります。 $DR[1] = $DR[2] = $DR[3] = false; は$DR[1],$DR[2],$DR[3]すべてをfalseにする記述です。 全てが動作中かをチェックするなら if ( $DR[1] && $DR[2] && $DR[3] ){ です。
お礼
お答えいただきありがとうございました。 http://okwave.jp/qa/q8282492.html こちらにて解決しました。
補足
お返事ありがとう御座います。 よろしければ追加でご回答いただければと思います。 つまり、 if(!$DR[1] && !$DR[2] && !$DR[3]){ の条件式は、少し前に書かれている、 $DR[1] = $DR[2] = $DR[3] = false; の影響を受けないということでしょうか。 $DR[1] = $DR[2] = $DR[3] = false; がif文の前にあるために混乱しております。 よろしくお願いします。
お礼
何度もお返事ありがとうございます。 >if ( !$DR[1] ) {} >if ( $DR[1] === false ) {} >こちらの二つも同じで$DR[1]がfalse(ドラムが停止状態)であるかの条件式です。 こちらの例で合点がいきました。 私は「!」がjqueryのtoggleのようなものだとばかり思っていましたが、falseという値と同義なのですね。 「!」の意味を間違えていました。 おかげさまで疑問を解消できました。 ありがとうございました。