非数値NaN
不適切な値
JavaScript には、未定義値 Undefined 以外に特殊な未定義型があります
それが、数値の未定義型 NaN(Not a Number) です
この値は数値型で不適切な数学的演算が行われた時に返されます
たとえば、文字列を数値型に変換することは可能ですが
文字列が数字ではなく文字で構成されている場合、これは不可能です
比較演算の場合は false が返されますが、明示的型変換では NaN が返ります
明示的型変換とは、自動型変換とは異なりメソッドを用いて型を変換します
文字列を整数に変換するには parseInt() メソッドを使用します
parseInt(numString, [radix])
numString は、整数に変換する文字列を指定します
radix は、numString に含まれる整数の基数を指定することができます
基数は 2〜32 までを指定することができ、この値は省略できます
文字列の数値表現には、0 及び 0x プリフィックスを使用することもできます
文字列の先頭が文字だった場合、数値に変換できないため NaN が返ります
途中に文字があっても、最初が数値の場合変換できるところまで変換します
var str1 = "2001 (c) 赤坂玲音";
var str2 = "Kitty on your lap";
alert(parseInt(str1));
alert(parseInt(str2));
最初の "2001 (c) 赤坂玲音" は頭の 2001 までの数字を数値に変換できます
次の "Kitty on your lap" は、数値に変換できないので NaN が返ります
また、このメソッドを使用すれば
文字列として表現した2進数など、特定の基数変換も可能です
8進数や16進数以外の基数を使いたい場合にも有効です
alert(parseInt("0101" , 2));
第二パラメータの 2 は、数字が2進数であることを意味しています
文字列を小数点も含めた数値に変換するには parseFloat() メソッドを使用します
parseFloat(numString)
numString には浮動小数点を文字列で表現した文字列を渡します
parsetInt() 同様の仕様で、変換できない場合は NaN を返します
このようなメソッドを使用した場合、NaN が返る可能性があります
そのため、メソッドが返した値が NaN であるかどうかを調べるべきです
NaN のエラーチェックには isNan() メソッドが有効です
isNaN(numValue)
numValue には、NaN であるかどうかを調べる値を指定します
もしこの値が NaN の場合は true、そうでなければ false が返ります
因みに、NaN であるかどうかを調べる方法はもう一つあります
可能性のある変数を自己等価比較して false が返れば NaN です
通常、同じ変数を等価比較すれば当然 true が返りますが、NaN の場合のみ false が返ります
NaN どうしの比較の結果は false という特殊な仕様を持っているのです
var str = "Kitty on your lap" , i;
i = parseInt(str);
if (isNaN(i)) alert("文字列の数値化に失敗しました");
if (!(i == i)) alert("i == i で false が返されました");
isNaN() で true が返されれば、変数が NaN であることが確認できます
同時に i == i が false であるならば、やはり NaN であると証明できます
parseInt(numString, [radix])
文字列で表現された数字を、指定基数で整数化します
numString - 整数化する文字列を指定します
radix - 数字の基数を指定します。省略可能です
戻り値 - 文字列の整数表現を返します。失敗すると NaN
parseFloat(numString)
文字列で表現された数字を、少数も含め数値化します
numString - 数値化する文字列を指定します
戻り値 - 文字列の整数表現を返します。失敗すると NaN
isNaN(numValue)
値が NaN かどうかを調べます
numValue - NaN かどうかを調べる値を指定します
戻り値 - numValue が NaN であれば true、そうでなければ false