isFinite関数の問題について
数値型の判定にisFinite関数を使う
SIEのJavaScriptでは、数値かどうかのチェックに、isFinite関数を使っています。isNaN関数はInfinityを真と判定してしまう問題があったので、isFiniteを使うようになりました。
引数を数値型に変換する問題点が
ただし、isFinite関数には、一つ問題点があって、仕様上、引数を数値型に強制的に変換してしまいます。
たとえば、
isFinite([]); isFinite("20");
はすべて、trueとなってしまいます。
この仕様の問題に対して、Crockford氏は、typeofも合わせて使うようなやり方を書籍の「javaScript: The Good Parts」で提案しているのですが、コードの量が大きくなってしまいます。
isNumber関数を独自に作ったとしても、軽量化という観点からは、好ましいと私は思っていません。
SIEではisFinite関数を中心に
軽量化を重視する立場から、typeofを使わず、isFinite関数だけでSIEは判定しています。また、Specもその点を配慮しています。