• 締切済み

!!winVar

サブウィンドウの有無確認関数の中で「!!winVar」という記述がありますが、 これはいったい何を意味しているのでしょうか? またソースの内容もいまいち理解できません。 細部の意味について知っておられる方がいましたら、 御教授のほど宜しくお願いします。 //子ウインドウ有無確認関数 function sbwin_closed(winVar) { var ua = navigator.userAgent if( !!winVar ) if( ua.indexOf('MSIE 4')!=-1 && ua.indexOf('Win')!=-1 ) return winVar.closed else return typeof winVar.document != 'object' else return true }

みんなの回答

noname#2336
noname#2336
回答No.2

こうすると、ややわかりやすくなると思います。 //子ウインドウ有無確認関数 function sbwin_closed(winVar) { var ua = navigator.userAgent; if( 'object' == typeof winVar ) { if( -1 < ua.indexOf('MSIE 4') && -1 < ua.indexOf('Win') ) { return winVar.closed; } else { return typeof winVar.document != 'object'; } } else { return true; } } 「winVar.document」の記述から、 winVarは documentの上位のオブジェクト、 windowオブジェクトを想定してることが 推察されます。 indexOf('MSIE 4')は uaの内容から文字列を探してるのですが、 「-1」が帰ってきた場合文字列が見つからなかったことを 指します。

noname#1785
noname#1785
回答No.1

winVarにどういう値が入ってくるのか見えないのですが・・・。 ざっと見たところだと、 1.(!!winVar) winVarがtrueかどうかをチェック。 1-1.ブラウザのユーザーエージェントを取得し、windowsのIE4であれば、winVarがクローズされているかどうかを返す。 (windowが表示されていればfalse、閉じられていればtrue) 1-2.ユーザーエージェントが1-1.以外の場合は、winVarのオブジェクトタイプがobjectかどうかをチェック。 (!=なので、objectじゃなければtrue、objectだったらfalseが返るのかな?) 2.winVarがfalseの場合は、trueを返す という流れのようです。 要は呼び出し元関数に、true か false を返していると。 (!winVar)とすると、winVarがfalseの時、という意味です。 二つ重ねるとfalseの反対で、trueかどうかのチェックをしています。 意味がわからなければ、間にalertを入れて値を確認していくと良いですよ。 例えば、 if( !!winVar ) の前に alert(!!winVar) と入れてみたり、 alert(ua.indexOf('MSIE 4')) と入れてみたりしたら、そこに入ってくるべき値が見れますので、それを元に参考書と付き合わせたらわかりやすくなります。 ご参考まで。

0715
質問者

お礼

ありがとうございます! 大変ためになりました。 アラートなどでどのような値が入っているのか確認してみたいと思います。

関連するQ&A