最近Switchでnullをチェックする機会があって、他のfalsyな値もチェックできるかを確かめたのですがNaNだけが失敗しました。
checkFalsyValue(false); checkFalsyValue(null); checkFalsyValue(({}).val); checkFalsyValue("hoge" - 0); // MISS!! checkFalsyValue(""); function checkFalsyValue(val) { switch(val) { case false: alert("FALSE!"); break; case null: alert("NULL!"); break; case undefined: alert("UNDEFINED!"); break; case NaN: alert("NAN!"); break; case "": alert("!"); break; default: alert("MISS!! " + val); break; } }
よくよく考えると、
NaN === NaN; // => false
だからですね。
強引にSwitch文で判定したかったら、isNaNをつかって、
function checkNaN(val) { switch(isNaN(val)) { case true: alert("NAN!"); break; } }
的な感じで判定できないこともありません。