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だから言って数値だと判定出来ないので注意ですね