2010年2月17日水曜日

世にも奇妙なJavaScriptのisNAN

http://journal.mycom.co.jp/news/2010/02/16/039/index.html

JavaScriptのisNAN関数は変数の内容が数値型かどうかを判別してくれるのだが、その挙動がどうもわかりづらい。そもそも関数の意味が「数値ではない(is Not A Number)」という紛らわしいもの(PHPのis_numericのほうが素直な気がする)というのはさておいて、例えば次の場合は何て表示されるでしょうか?

if( isNaN( "10" ) ){
   document.write( "not number" );
} else {
   document.write( "number" );
}

答えは「number」、つまり"10"は数値型として認識される。他にもnullや空文字も数値型と認識されるらしい。しかし、

document.write( "10" + "20" );

とすると「1020」と表示される。つまり文字列の連結であって、数字の足し段ではない。

この挙動を理解していなかったので時間を浪費してしまった。

0 件のコメント:

コメントを投稿