- ベストアンサー
JavaScriptコードの解釈方法について
- JavaScript初心者が理解できないコードについて質問しています。
- 質問者はあるサイトのソースコードを参考にしている中で、特定の行の意味が分からないと述べています。
- 質問者は、navigatorオブジェクトを使用してユーザーエージェントの値を取得し、その値に基づいてFf変数にtrueかfalseを代入するコードについて詳しい説明を求めています。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
既に他の回答者様が答えられていますが、演算子の処理順序を理解されていないようなのでその辺りを詳しく説明いたします。 まずは「navigator.userAgent」が処理され、「ユーザエージェント」が文字列として取得されます。 次に「ユーザエージェント.lastIndexOf("Firefox")」が処理され、ユーザエージェントの中からFirefoxという文字列を検索します。 この結果は「インデックス」として、ユーザエージェントの何文字目にFirefoxという文字列があらわれたかが、数値で取得されます。 次に「(インデックス != -1)」が処理されます。この!=は比較演算子であり、≠(ノットイコール)の意味になります。 つまり、インデックスが-1でないならばtrue、インデックスが-1ならばfalseとなります。 ちなみにインデックス、つまり「ユーザエージェント.lastIndexOf("Firefox")」が-1になるということは、 ユーザエージェントの中にFirefoxという文字列が含まれていなかったということです。(lastIndexOfの仕様) よってこの部分の解釈は「ユーザエージェントがFirefoxであるか」です。 次は見慣れないと思いますが、三項演算子と呼ばれる「ユーザエージェントがFirefoxであるか ? true : false」です。 これは「条件式 ? 真の場合 : 偽の場合」という形で成り立っていて、今回の例ですと「trueまたはfalse」となります。 つまりユーザエージェントがFirefoxであるならば「true」、ユーザエージェントがFirefoxでないならば「false」ですね。 最後は残りの「var Ff = trueまたはfalse;」で、言うまでもなくFfにtrueまたはfalseが代入されます。 三項演算子の部分が何のためにあるのかわかりませんが、以上のように処理されます。 演算子の優先順位をしっかり学べば、難なく解読できると思います。
その他の回答 (3)
- babu_baboo
- ベストアンサー率51% (268/525)
こんにちは。 (navigator.userAgent.lastIndexOf("Firefox") != -1) もうこの評価で、true もしくは false なのだから、それを更に三項演算子で評価して 同じ値を返そうとしているのだから、お・馬・鹿っ!
お礼
回答ありがとうございました。
- LancerVII
- ベストアンサー率51% (1060/2054)
こんにちは。 処理を分解すると // ユーザエージェントを取得 var userAgent = navigator.userAgent; // 文字列の最後から検索してFirefoxがみつかった位置を返す // みつからなかった場合は-1が返る var index = userAgent.lastIndexOf("Firefox"); // Firefoxであると判別する為のフラグ用変数 var Ff; if ( index != -1 ) { // indexが-1以外の場合はtrue // すなわち、Firefoxであるとしてフラグを立てる Ff = true; } else { // -1だった場合はFirefoxという文字がみつからなかったので // Firefoxであるというフラグは立てない Ff = false; } となります。 要はユーザエージェントの中にFirefoxという文字列がみつかったらFirefoxでアクセスされていると判別するためのフラグ値をFfという変数に入れている処理です。 その後、 if ( Ff ) { // Firefoxの場合にさせたい処理 alert ( 'あなたのブラウザはFirefox' ); } という感じで使えます。
お礼
回答していただきありがとうございました! 一文ずつ丁寧に解説してくださり、 また実際の使用例も挙げてくださりとても分かりやすかったです。 アドバイスいただいた分解後の文でも同様の挙動が得られた事を確認しました。 大変参考になりました!
- msk1003
- ベストアンサー率57% (15/26)
三項演算子についてってことでいいんでしょうか。。 質問の式は、以下と同じです。 var Ff; if (navigator.userAgent.lastIndexOf("Firefox") != -1){ Ff = true; } else { Ff = false; } 三項演算子で調べると色々でてきます 。 もうおわかりかと思いますが、以下の様な構文です。 式 ? trueの場合の返り値 : falseの場合の返り値 ; あんまりにも複雑なif文である場合は、利用しないほうがいいでしょう。
お礼
回答していただきありがとうございました。 三項演算子いろいろ調べてみました。 ifでも同様の状況を表すことができるんですね。 非常に参考になりました!
お礼
回答していただきありがとうございました! いただいた回答を実際のソースと見比べ、一文一文読んでみると コードを解釈することができました。 初心者の勉強の意思を挫くことのない(笑) 非常に丁寧で分かりやすく説明にとっても感謝しています! ベストアンサーに選ばせて頂きます^^