NaNの判定 isNaNとかNumber.isNaNとか

isNaN(通常パターン)

お馴染みJavaScriptで数値かどうかを判定するisNaN関数。
数値でない時(Not a Numberの時)に戻り値がTrue

var value1 = "hoge"; // 文字列
var value2 = 123; // 数字
var value3 = "123"; // 半角数字の文字列
var value4 = "123"; // 全角

document.write(isNaN(value1) + '<br />'); // true
document.write(isNaN(value2) + '<br />'); // false
document.write(isNaN(value3) + '<br />'); // false
document.write(isNaN(value4) + '<br />'); // true

実行結果

true
false
false
true

半角数字の文字列をisNaNで判定するとfalseになるんですね^^;
文字列のつもりでtrueになると思い込んでいると思った通りの判定結果にならないので気をつけないといけない。。。

isNaN(特別な値のパターン)

今度はnullとかundefinedとか特別な値の時の実行結果を検証してみる。

var value5 = "";				// 空文字
var value6 = " ";				// スペース
var value7 = null;				// null
var value8 = NaN;				// NaNを代入
var value9 ;					// undefined
document.write(isNaN(value5) + '<br />');		// false
document.write(isNaN(value6) + '<br />');		// false
document.write(isNaN(value7) + '<br />');		// false
document.write(isNaN(value8) + '<br />');		// true
document.write(isNaN(value9) + '<br />');		// true

実行結果

false
false
false
true
true

なんと空文字、スペース、nullがfalse判定!?
予想した値はどれも数値ではないイメージ(つまりisNaNがTrue)だったけれど判定結果はfalse
確かに、「” + 1」とか「” + 1」とか「null + 1」の計算結果は全て1になるので、空文字、スペース、nullは0として(数値として)扱われるみたい
一方で「NaN + 1」 とか「undefined + 1」とかの計算結果はNaNになる。

Number.isNaN(通常パターン)

今度はNumber.isNaNでの判定結果確認

var value1 = "hoge"; // 文字列
var value2 = 123; // 数字
var value3 = "123"; // 半角数字の文字列
var value4 = "123"; // 全角数字の文字列
document.write(Number.isNaN(value1) + '<br />'); // false
document.write(Number.isNaN(value2) + '<br />'); // false
document.write(Number.isNaN(value3) + '<br />'); // false
document.write(Number.isNaN(value4) + '<br />'); // false

実行結果

false
false
false
false

Number.isNaNでtrueを返すのは引数がNaNの時のみ。なので上のパターンは全てfalseが返される。つまり変数の値が数値であるかを判定したい時には使えない。

Number.isNaN(特別な値のパターン)

空文字やスペースやnullなどをNumber.isNaNで判定してみた。

var value5 = "";				// 空文字
var value6 = " ";				// スペース
var value7 = null;				// null
var value8 = NaN;				// NaNを代入
var value9 ;					// undefined
document.write(Number.isNaN(value5) + '<br />');		// false
document.write(Number.isNaN(value6) + '<br />');		// false
document.write(Number.isNaN(value7) + '<br />');		// false
document.write(Number.isNaN(value8) + '<br />');		// true
document.write(Number.isNaN(value9) + '<br />');		// false

実行結果

false
false
false
true
false

Number.isNaNの場合は、確かにNaNの時のみtrueが返される。undefined(value9)の場合もfalseが返された。
ただし、Number.isNaNがfalseだから言って数値だと判定出来ないので注意ですね

シェアする

  • このエントリーをはてなブックマークに追加

フォローする