javascriptでの"!!"の意味がなんとなくわかった!!

よく、人のソースを読むと

var hoge = !!fuga;

というイディオムがあって"!"を2回続けるのってどういう意味だろう?って思ってた。
否定の否定は肯定だから式自体に意味が無いよなぁとか、各種リファレンスとかを当たってみたけどそんな式とか無くて、とりあえず今は気にしないことにしていた...が!!

新しくなったはてブのソースを呼んでいるときにひらめいた。そのソースではたとえばブラウザがXPathをネイティブにサポートしているかどうかをboole値で保持するもisSupportsXPathというプロパティがあった。

Ten.Browser.isSupportsXPath = !!document.evaluate;

これと同じことを実現しようとした場合、以前の自分であればこう書いていただろう。

Ten.Browser.isSupportsXPath = document.evaluate;

上の2つはif文での判定を行う場合には同じ意味を持つかもしれないが、保持している値は全然異なる。XPathをサポートするブラウザであった場合、前者はtrueというboole値であるが、後者は documentオブジェクトの「evaluateメソッドへの参照」である。

後者の場合、実際にどういう場合に不都合があるのかは思い付かないけど、たとえばtoString()した場合に"true"/"false"を期待している場合とかだろうか?

とりあえず、意味は分かったのですっきりした。