phpなんかでもそうだが、基本的にfalseやnull、0は等しいものとして扱うことができる。この場合の等しいというのは==で比較した場合の話で、===で比較すると、型が違うから同じものとして扱うことはできない。
で、javascriptの話だけど、javascriptでalertを使っていると、ときどき『undefined』という文字列を目にする。まあ、要は値が何にもねーぞこのやろうってなことを言ってるんでしょうけど、このundifinedやfalse、nullに0、果ては空文字や改行コードのみ(n)のそれぞれを==で比較した場合に、trueが返ってくる場合とfalseが返ってくる場合が結構ごちゃまぜになっているような印象を受ける。
まず、0や改行コードのみ、空文字はfalseと==で比較するとtrueが返ってくる。でもnullやundifinedはfalseが返ってくる。falseで比較してるのにtrueが返ってくるとか何かややこしいことを言っているけれど、要は等しいかどうかってこと。trueが返ってくれば等しいと判断できる。
false と 0、n、空文字 => 等しい
false と null、undifined => 等しくない
こんな感じ。
ここから判断するに、nullとundifinedは等しいっぽい。0とnと空文字も等しいと思われる。でも例えばnullと空文字なんかは等しくないようだ。
funciton test(str) {
if(str == null) {
alert('null');
}
}
前にこんなようなif文を書いた時に、strの中身は空文字なのになぜかalert文が出ないな~って思ったことがあったんですけど、どうやらそういうことらしい。
あと、そう。FirefoxとIEで違う動きをしたこともありました。
というのも、自分ではstrにnullを入れてたつもりなのに、何かFirefoxかIEのどちらかは(どっちかはちょっと忘れた)勝手に改行コードを入れたりすることがあって、それで何度やってもalertが出なかった、みたいなことがありました。多分、firebugでDOMを調べたら改行コードが入ってるのが分かったような気がするから、Firefoxの方がそうだったかもしれないね。
一度自分の中で整理しておきたかったので、メモ。
LIGはWebサイト制作を支援しています。ご興味のある方は事業ぺージをぜひご覧ください。