-PR-
解決
済み

ie=!!document.all

  • 暇なときにでも
  • 質問No.37381
  • 閲覧数409
  • ありがとう数2
  • 気になる数0
  • 回答数4
  • コメント数0

お礼率 52% (20/38)

ie=!!document.allというように!を2回重ねることにどういう意味があるのでしょうか?
やっぱりie=document.allとは違うんですかね?
すみません、簡単なんですがよろしくおねがいします。
通報する
  • 回答数4
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.1
レベル11

ベストアンサー率 55% (155/280)

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

お礼率 52% (20/38)

ありがとうございます!

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

む、むずかしい・・・・
投稿日時 - 2001-02-07 10:26:55
-PR-
-PR-

その他の回答 (全3件)

  • 回答No.2
レベル3

ベストアンサー率 0% (0/1)

「ie=document.all」では「document.all」と同じものが「ie」に代入されてしまいます。この場合は「ie.tags('TABLE')」のようにして使うことが出来ますね。「ie=!!document.all」はInternet Explorerあるいはそのコンパチブルかどうかを論理値(trueまたはfalse)として持っておくねらいがあるのでしょう。 pu ...続きを読む
「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」はブラウザに依存するコードではありません。


  • 回答No.3
レベル11

ベストアンサー率 55% (155/280)

antigen さん、 えっと、議論するつもりはないんですが、document.all が論理値 でないことは知っています。私の回答からは読みとれなかったでしょ うか? katsudon さんには伝わったようなので、安心していたので すが。 で、ie=!!document.all がブラウザに依存するとも言っていません。 javascript の機能をもつどのブラウザでも動作し、ie ...続きを読む
antigen さん、

えっと、議論するつもりはないんですが、document.all が論理値
でないことは知っています。私の回答からは読みとれなかったでしょ
うか? katsudon さんには伝わったようなので、安心していたので
すが。

で、ie=!!document.all がブラウザに依存するとも言っていません。
javascript の機能をもつどのブラウザでも動作し、ie という変数
には true か false が正しく入ることでしょう。

ですが、ie という変数名は、ブラウザを判別する意図で使われて
いるのは明白ですよね?IEだけの拡張機能であるとは限らないのに、
ブラウザの判別目的で使っているので好ましくないと言っているの
です。
  • 回答No.4
レベル3

ベストアンサー率 0% (0/1)

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

すみません。よく読めば確かにさんのおっしゃっているように受け取ることができます。不慣れなのか、読解力が乏しいのか、申し訳なく思います。


katsudonさん、punchan_jpさんへ

ご迷惑をおかけしました。お詫び申し上げます。
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ