• ベストアンサー

ie=!!document.all

ie=!!document.allというように!を2回重ねることにどういう意味があるのでしょうか? やっぱりie=document.allとは違うんですかね? すみません、簡単なんですがよろしくおねがいします。

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

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

C言語では、論理演算の結果は整数の 1 か 0 しかとりませんので、 0以外なら1、0なら0となるような結果を得たいときに !! を使うこ とがあります(可読性が下がるのであまりおすすめされませんが)。 JavaScript でこれをするということは、true に相当する値(つま り、0 に相当しないなんらかの値をもっている)なら true そのも の、0 に相当する値なら false そのものを得たいということでしょ う。 document.all というのは IE4 以降の拡張機能だそうですので、そ れ以前のものでは document.all の値は false 相当になります。 つまり、これに !! をつけることで、IE4 以降なら true、そうで なければ false となるという判断材料にしていると思われます。 変数名の ie もそういう意図でしょう。 しかし、他のブラウザでそういう拡張がないという保証はないので、 ブラウザの種別の判断としてはいい方法とは思えませんけどね。 document.all の機能の有無を知りたいのであれば、正しい方法だ と思います。

katsudon
質問者

お礼

ありがとうございます! IE4以上であれば ie=document.allはieの中にオブジェクトが入る ie=!!document.allはieの中にtrueが入るということでいいんでしょうかね? む、むずかしい・・・・

その他の回答 (3)

  • antigen
  • ベストアンサー率0% (0/1)
回答No.4

punchan_jpさんへ すみません。よく読めば確かにさんのおっしゃっているように受け取ることができます。不慣れなのか、読解力が乏しいのか、申し訳なく思います。 katsudonさん、punchan_jpさんへ ご迷惑をおかけしました。お詫び申し上げます。

回答No.3

antigen さん、 えっと、議論するつもりはないんですが、document.all が論理値 でないことは知っています。私の回答からは読みとれなかったでしょ うか? katsudon さんには伝わったようなので、安心していたので すが。 で、ie=!!document.all がブラウザに依存するとも言っていません。 javascript の機能をもつどのブラウザでも動作し、ie という変数 には true か false が正しく入ることでしょう。 ですが、ie という変数名は、ブラウザを判別する意図で使われて いるのは明白ですよね?IEだけの拡張機能であるとは限らないのに、 ブラウザの判別目的で使っているので好ましくないと言っているの です。

  • antigen
  • ベストアンサー率0% (0/1)
回答No.2

「ie=document.all」では「document.all」と同じものが「ie」に代入されてしまいます。この場合は「ie.tags('TABLE')」のようにして使うことが出来ますね。「ie=!!document.all」はInternet Explorerあるいはそのコンパチブルかどうかを論理値(trueまたはfalse)として持っておくねらいがあるのでしょう。 punchan_jpさんへ JavaScriptでは文脈によってオブジェクトを適切に型変換するので「document.all」に対して文字列(Stringオブジェクト)が要求されれば、もし「document.all」が存在すれば「[object]」というような文字列となるでしょう。なければ「undefined」になるかもしれません。論理値(Booleanオブジェクト)を要求するような文脈では「document.all」が存在しなければ「false」となります。「document.all」がある場合には、例外を除いて「true」となります。「document.all」はInternet Explorerではコレクションクラスのオブジェクトとなっているので、こういった単純な型変換ではObjectオブジェクトのようにふるまうでしょう。「document.all」は論理値ではありません。 この場合「document.all」がInternet Explorerの拡張機能であるかどうかは問題ではなくて「document.all」というオブジェクトが存在するかどうかを調べるだけです。したがって「ie=!!document.all」はブラウザに依存するコードではありません。

関連するQ&A

  • javascriptのdocument.allについて。

    質問です。 javascriptで扱えるdocument.all要素の基本的な使い方や役割や意味などについて教えてください。 document.allについての説明は、IE独自拡張というのがほとんどで、その意味についてはあまりありませんでした。 どなたかご教授願います。 よろしくお願いします。

  • document.allはネスケでは使えない?

    下記だとIEでもネスケでも動くのですが、 document.Myform.email.value; 下記だとネスケで動きません。 document.all.email.value; 何かいい方法はないでしょうか・・。 function checkMailAddress() { fOBJ = document.main.email.value; check = /.+@.+\..+/; if (!fOBJ.match(check)) alert("メールアドレスが正しくありません"); }

  • JavaScriptのdocument.all("変数名").valueについて

    今、JavaScriptの勉強をしているのですが、document.all("変数名").valueの使い方の意味がよくわかりません。 そもそも、document.allの意味自体がよくわかりません。 わかる方、どうか教えてください・

  • all usersのドキュメントが消えてしまった。助けて!

    こんにちわ。助けてください。 C:\Documents and Settings\All Usersの たぶん Documentsフォルダ配下だったと思うのですが、 そこにフォルダ(共有フォルダ)を作って大事な写真データ(子供の写真)を大量に保存していたのですが、気がついたら一切なくなっていました。心当たりとしては、数日前、ネットワークが設定がおかしくなり、試行錯誤している時に 「ネットワーク接続」-「ホーム/小規模オフィスのネットワークを設定する」を適当に実行してしまったんです。 それが原因なのでしょうか? 今は、C:\Documents and Settings\All Users\Documents をクリックすると、 「C:\Documents and Settings\All Users\Documentsにアクセスできません。アクセスが拒否されました」と出てしまいます。 保存先が上記箇所だったかもうろ覚えなのですが、たぶんそうだったと思います。 なぜそこに保存していたかと言うと、私と妻はそれぞれ別のユーザーを設定しており、どちらからも見られるようにしたかったので、そこに共有フォルダを作っていました。 これは保存していた内容がなくなったのではなく、アクセスできないだけなのでしょうか?それとももう復元できないのでしょうか? 全くなさけない話ですが、非常に大事な思い出の写真なので、 泣けて来ます。バカだからバックアップもありません。 こんなおばかな私にどうか助言ください。

  • VBA .document.all.の後はセルでも

    先質問 http://okwave.jp/qa/q7750791.html では .document.all.number01.Value = Range("A1").Value .document.all.number02.Value = Range("A2").Value .document.all.number03.Value = Range("A3").Value .document.all.number04.Value = Range("A4").Value .document.all.number05.Value = Range("A5").Value とHPのソースから .document.all.●.Valueの●の部分を調べ、それがnumber01~number05だという事がわかったのですが、 実際やろうとしたHPのnumber01~number05にあたる部分は単純なものではなく、「文字列+変数」でした。 よってその「文字列+変数」をエクセル上のD列のセルに作りました。 .document.all.D1.Value = Range("A1").Value .document.all.D2.Value = Range("A2").Value .document.all.D3.Value = Range("A3").Value .document.all.D4.Value = Range("A4").Value .document.all.D5.Value = Range("A5").Value でも駄目で .document.all.("D1").Value = Range("A1").Value .document.all.("D2").Value = Range("A2").Value .document.all.("D3").Value = Range("A3").Value .document.all.("D4").Value = Range("A4").Value .document.all.("D5").Value = Range("A5").Value でも駄目でした。 書き方が間違っているのか、そもそも.document.all.の後にはセルは利用できませんか? 「文字列+変数」というか「「文字列+個別の番号」です。

  • 質問です! Operaって、document.all使えるんですか?

    質問です! Operaって、document.all使えるんですか? javascript:alert(document.all)という風に入れたら、[object HTMLCollection]という値が返ってきました ちなみに、  Firefox3.6 : [object HTML document.all class] Netscape7 : undefined Safari (おそらく4) : Operaと同様。 document.allて、IEだけかと思っていましたが。

  • objIE.Document.all.tags("

    Sub test1() Dim objIE As InternetExplorer Set objIE = CreateObject("InternetExplorer.Application") objIE.Navigate "http://oshiete.goo.ne.jp/" objIE.Visible = True Call IE_wait(objIE) objIE.Document.forms("center_searchform").elements("MT").Value = "教えて" For Each myObj In objIE.Document.all.tags("input") If myObj.alt = "検索する" Then objIE.Document.all.tags("input").alt("検索する").Click ‘ココでエラー End If Next Set objIE = Nothing End Sub これを実行するとクリックできないのですがなぜでしょうか? オブジェクトは、このプロパティまたはメソッドをサポートしていません。(Error 438) が表示されます。 他の方法で解決する事は出来ますが、 If myObj.alt = "検索する" Then が出来てるからこのままうまく行きそうな気がするのですが? 理由を教えてください。ご回答よろしくお願いします。

  • IEでドキュメントモードの指定

    IE 10.0.9200.16843を使用しています。 ドキュメントモードをIE8に固定したいので <meta http-equiv="X-UA-Compatible" content="IE=IE8"> と書いたのですが、反映されないようなのです。 検証に使ったコードは以下の通りです。 ================================== <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html lang="ja"> <head> <meta http-equiv="X-UA-Compatible" content="IE=IE8"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>IEドキュメントモードテスト</title> </head> <body> <script type="text/javascript"> document.write("ドキュメントモード=" + document.documentMode + "<BR>"); </script> </body> </html> ================================== 何か見落としがあるのだと思うのですが、教えて頂けませんでしょうか。 なお、metaタグでなくレスポンスヘッダでX-UA-Compatibleを指定しても同じでした。 IE=IE7やIE9を指定しても変わりませんでした。 よろしくお願いいたします。

    • ベストアンサー
    • HTML
  • all Usersの共有ドキュメントについて

    新たな、アプリケーションをインストールする際に、「\all Users\ 共有ドキュメント」内にセッティングデータを作成しているようですが現在は「共有ドキュメント」のフォルダがなくかわりに「Documents」のフォルダがあり開こうとすると「アクセス出来ません。アクセスが拒否されました。」と表示されインストールも出来ません。この様なご経験のあるかたがいらしゃいましたらご教示下さい。 動作環境:Windows XP Pro

  • All Users Documents Can't Open…

    1か月ほど前からパソコンを起動するとAll Users Documents Can't Openとでます。あと、パソコンのテレビで録画していて終了時間になると、All Users Documents Can't Openがでて、それをクリックして消さないと永遠に録画が継続されてしまいます。色々調べて、My Documentsの中にMy Picturesもつくったし、TV-FUN STUDIOも再インストールしましたがなおりません。どうしたらなおるでしょうか?分かる方いらっしゃいましたら、教えてください。お願いいたします。