!!って何?

prototype.jsを少しずつ読み解く。自分用メモ。

var Prototype = {
  Version: '1.6.0.1',

  Browser: {
    IE:     !!(window.attachEvent && !window.opera),
    Opera:  !!window.opera,
    WebKit: navigator.userAgent.indexOf('AppleWebKit/') > -1,
    Gecko:  navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('KHTML') == -1,
    MobileSafari: !!navigator.userAgent.match(/Apple.*Mobile.*Safari/)
  },

はい。ここまででわからないのは5・6行目に現れる!!
否定の否定?、つまり元のままじゃん。意味あるの?
しばし考えて思ったのが、これは!!に続くものをtrueもしくはfalseに変換するためにあるっぽいな。

例えばnullは条件の中では偽として扱われるが、そのままnullを使用すると当たり前だがnullである。これをfalseに変換したい場合に使うんじゃないかな。

var foo = !!null;
foo; //=> false