is が == ではなく === に変換される
CoffeeScriptで is と書くと jsで === と変換されるので == はどうやって書くんだろうと思い調べたけれどなかなか分からなかった(というか、【等号の「==」は言語によって意味が異なったりして紛らわしく、よくトラブルの元になるので、コンパイル時に「===」に変換される。】と書いてあった)のでjsの方で === でもtrueが返るようにしようと思った。
== と === の違い
== → 2つの値を比較して、等しければtrueを返し、等しくなければfalseを返す。
=== → ==より厳密。型も値も等しい場合はtrue、等しくなければfalseを返す。
=== は型まで等しくないとtrueを返してくれない。らしい。
問題なのはこんな感じの文。
$_ = $(this); opacity = $_.css("opacity"); if (opacity === 0){ alert("OK"); }
これだとfalseでOKが出てこない。(cssではopacityを0にしている)
型が間違ってるという事。
型を調べるのは
typeof();
という関数を使う。
これで
alert("opacity = " + typeof(opacity)); alert("0 = " + typeof(0));
みたいなことをすれば型の定義がわかる。
結果
opacity = string 0 = number
やっぱり型が違っていた。
文字列を数字として解釈させるためにparseIntメソッドを使って
$_ = $(this); opacity = parseInt($_.css("opacity")); if (opacity === 0){ alert("OK"); }
としたが、挙動がおかしくなった。
ので
$_ = $(this); opacity = Number($_.css("opacity")); if (opacity === 0){ alert("OK"); }
としたら成功した。
parseIntは整数しかとらないためおかしくなった感じ。
ちなみにparseFloatでやっても問題なく動いた。