!!【追記あり】

国語におけるビックリマークは驚きだし
数学におけるビックリマークは階乗だけども。
  
プログラムにおけるビックリマークは否定なのです。はい。
でもビックリマークが2こ並んでるとそれは否定じゃなくなるのです(わかりにく)
  
つまり、否定の否定(二重否定というらしい)は
一周回ってそのままの状態を表すみたい。
小学生がよく言う「〜の反対の反対ー!」をイメージすればわかりやすいかも。
  
ただ、それも少し違って。
具体的に説明しましょう。
  
例えば、数値の1の場合。

alert(1);    //1

1は1。それ以外の何者でもない。
んで1の否定(!1)

alert(!1);    //false

これは false になる。当たり前だけど。
  
けれども、その「1の否定」の否定である(!!1)は、

alert(!!1);    //true

1 ではなく true になる。
  
あえて言葉にして簡単に説明すると、
(!!1)は
1を否定 = false → この false を否定 = trueこんな感じに考えれば良い模様。

  
そうなのです。二重否定とは論理値の否定であり、
そのため戻り値は true か false に限定されるのです!
  
数値ではなく論理値がほしい時とかにとっても便利なのだとかっ!
おもしろい書き方があるんだなー!
  



  
【追記、訂正】
つい今さっき(!1)が false になるのは当たり前だよね、どやってしたけれど
あたりまえじゃないっす。
いや、動きとしては当たり前に正しいのだけど、
私の頭は全く理解してませんでしたすみません。
twitterでアドバイスもらいました。
  

!1がfalseになるのは、!演算子がbooleanにしか作用できないため、暗黙に1がbooleanであるtrueに変換されてから!演算子が作用するのです。

  
ふぬ、なるほど。ということは、(!!1)は
1が ! 演算子のせいで暗黙変換でbooleanに変換されて true になり、その後 ! 演算子が適用され false → さらにそれの否定だから true
ってことか。
なるほどにゃーーーー!スッキリ!
でもあんまり使われないらしいよ、あらら