!!【追記あり】

国語におけるビックリマークは驚きだし
数学におけるビックリマークは階乗だけども。
  
プログラムにおけるビックリマークは否定なのです。はい。
でもビックリマークが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
ってことか。
なるほどにゃーーーー!スッキリ!
でもあんまり使われないらしいよ、あらら

コロンっておいしいよね(スコープ定義演算子)

ちっさい頃、中のクリームを指で押し出して食べてた(汚い)
  
いや、食べてたけども。
今回はその話ではないのです。
  
今日も今日とてPHPをさわっていたら
あらまぁ不思議、 ::(コロン2つ)並んでたのですよ。
  

$hoge = $foo->fetchAll(PDO::FETCH_COLUMN, 0);

こんな感じでPDOの中では見たことがあったんだけど、  
PHPの中では見たことがなくて!調べてみたー
  
参考サイト:【 ほでなすPHP 】 PHPの基本 -> クラス
  
ここによると、
インスタンスを生成しなくても、クラスのメンバ関数(クラス関数という)を使うことができる」そうな!
リンク先にも書いてあるけど、こっちにもサンプル書いとく。

<?php
class hoge {
    function foo() {
        print('Hello World!!!');
    }
}

hoge::foo();    //Hello World!!!が表示される

こんな感じ。
:: 演算子(スコープ定義演算子)というらしい。コロンコロン演算子じゃないのね
  
通常だとインスタンスオブジェクトを生成しないと
クラスのメンバ変数やクラス関数は使えないんだけど、
この ::(コロン2つ)を使えはクラス関数だけは使えちゃうのです!
注:メンバ変数は使用不可。メンバ関数の中でクラスのメンバ変数を参照するのもできないよ
  
便利なものもあるもんだねー

表示とか非表示とか

いろんな種類があるみたいなのでちょっとまとめてみる

visibility - ボックスの表示/非表示を切り替える
-visible : ボックスを表示する
-hidden : ボックスを非表示にする(注意:見えなくなるだけでそこに存在はしてる)

  
display - ブロックレベル、インラインレベルなどの要素の表示形式を指定する
-block : 指定した要素をブロックレベルで表示する
-none : 指定した要素とそこに含まれる子要素のボックスを生成しない(注意:そこに存在してない)

  
clip - ボックスを切り抜いて表示する(クリッピング)
-auto : 切り抜きはせずボックス全体を表示、初期値
-rect(上,右,下,左) : ボックスの左上端を基準として、上右下左のそれぞれの距離を指定して表示

  
(ほぼ参考サイトから引用)
  
このあたりがCSSで表示周りをいじるときに使えるプロパティかな?
とくに非表示に関係してるvisibilitydisplayの違いは覚えといたほうがいいかもっ
visibilityのhiddenは見えないだけでそこにボックスはあるから
非表示にしてもそこは空欄になるだけだけど、
displayのnoneはボックス自体がなくなって詰められちゃうから
他の表示がずれたりするのよん
  
んで、ちょっとテイストがちがうけどHTMLの属性で
disabled - 要素の無効化
を指定すれば表示はされてるけどいじれない状態にできるのだー
  
どうして非表示にしたいのか、とかを考えればどれを使えばいいかわかりそうだぬーん
  
プロパティなどなど詳しく知りたい人はリファレンスへごー!
  
  
参考サイト:
HTML非表示・使用不可メモ(Hishidama's disabled/visibility/display Memo)
海月屋 * スタイルシートリファレンス 目的別
HTMLリファレンス
http://www.htmq.com/style/index.shtml

オブジェクトのプロパティのカンマ

オブジェクトを作るとき、
最初から独自のプロパティを持たせるには

var hoge = {
    name: 'chii',
    sex: 'female',
    like: 'juice' ,
    getName: function () {
        return this.name;
    }
};

こんな感じで書くのです。
  
連想配列みたいなイメージを持つとわかりやすくて
プロパティ名 : 値(関数をいれることもできるよ、その場合はメソッドと呼ぶよ)
こんな構造になってるのよん。
  
んでこれを書くときにいつもわからなくなるのが
「一番最後のプロパティに ;(セミコロン)をつけるのかどうか」
  
結論、つけない。いい加減覚えましょう私。
  
一応 ,(カンマ)をつけても動くみたいだけど、
IEとかではエラーを吐くらしいのでそれもだめっ!絶対!
  
  
ちなみにオブジェクトのプロパティにアクセスする方法はいくつかあって

hoge.sex;    //female
hoge.getName();    //chii

みたいに .(ピリオド)でつなぐパターンや

hoge['like'];    //juice

みたいに本当に連想配列みたいにアクセスするパターンがあるのですん
  
ちなみにプロパティを後から追加することもできて、それぞれ

hoge.language = 'japanese';

hoge['address'] = 'Tokyo';

と書きますん

forループ

for文を回すとき、いつもだと
  

for (var i=0; i < array.length; i++){
    //処理
}

  
こんな感じで書いてた。
けどこれはあまり良くないそうで!
この場合、ループの繰り返しごとに配列の長さを調べに行ってて
処理が遅くなっちゃうんだって!
  
じゃあいちいち見に行かないようにキャッシュをとっておくといいわよ、とか
でもarrayが可変ならlengthも更新できるようにしたほうがいいわよ、とか
オライリー先生がおっしゃっていまして。
  
色々と最適化するとこうなるらしい
  

var i,
     array = [];
for (i = array.length(); i--){
    //処理
}

  
どーん。
  
なるほど、lengthをiに代入してループ全体で扱えるようにしてる(らしい)。
lengthに到達するまで数え上げていくんじゃなくて0になるまで減らしていくのか。
i++やi--も「過剰なトリック」に走っていて(?)あまり良くないそうなので
i -= 1とかにした方がいいのかも


for文の書き方は「いつもの」って感じでおんなじ書き方で書いちゃってたけど、
こういう書き方もあるのねーふむふむ
  
ちなみにwhile文で書く方法もあるみたいだけど
気になる人はオライリー先生に聞いてみるといいよっ
  

JavaScriptパターン ―優れたアプリケーションのための作法

JavaScriptパターン ―優れたアプリケーションのための作法