2つの!使用についての質問です



0   名前: 河野行夫 : 2006/04/18 13:35
m035様、お疲れさまです。

他の掲示板(アドレスが分からなく、ここで質問させていただきます)で
!!という記号を用いて、次のようにご指導されておりますが、この
if(!!opener&&!!opener.subw&&!opener.subw.closed){....}

if(opener&&opener.subw&&!opener.subw.closed){....}
のちがいは何でしょうか。自分なりに考えたのですが、結論に至りません。
ぶしつけな質問で恐縮ですが、多方面でご活躍の先生のような素晴ら
しい技術の方に直接この点をお聞きしたいと思いました。
よろしくお願い申し上げます。

1   名前: m035 : 2006/04/18 13:35  [URL
いわゆる二重否定のことでしょうか。
http://otd8.jbbs.livedoor.jp/javascript/bbs_tree?base=14730&range=1
で同じ話題がありました。
その中の発言14739で
http://www.kawa.net/works/js/learn/basic.html
の内容および、
http://www2u.biglobe.ne.jp/~oz-07ams/prog/ecma262r3/9_Type_Conversion.html
の9.2 ToBooleanがそれにあたる
と言う話があります。
!!を使うとその右側の評価対象が2つ目のurlの表にあるように、
0、false、null、""(長さ0の文字)、NaN、undefinedの時にfalseとなり、
それ以外ではtrueとなります。
つまり、オブジェクトの存在を確認したいときに
if(!!オブジェクト){}
とすると確実にBoolean(真偽値)化に出来るので都合がいいのです。
それと、
http://www.tagindex.com/cgi-lib/q4bbs/patio.cgi?mode=view&no=366
の>>6でご指摘を受けているように、この場合は二重否定はいりません。
単に、存在の判定にはもろもろの理由で「!!」を使うことが多く、わかりやすいため癖でつけただけです。

最後に、間違っているかもしれない
私の意味不明な回答よりも役に立つurlをあげておきます。
http://www5e.biglobe.ne.jp/~purest/javascript/zakki/niju.html

余談:
一つ目のurlでの発言14757と14763も読んでおくとためになります。

2   名前: 河野行夫 : 2006/04/18 13:35
m035様
お答えありがとうございます。
なんとなく分かったような気がいたします。
まだまだ初心者ですので、すいません。

3   名前: 匿名希望 : 2006/04/18 13:35
 次回からは回答者指定や他サイトからの異次元レスは避けるようにしましょうね。

4   名前: lukeJaFox : 2006/04/18 13:35
>>3
根性悪そうだなw

一覧へ戻る