入力が数値の場合に簡単な計算を行うHTMLフォームを作成しています。ただし、私の数値入力は、javascript関数によって数値と見なされていません。私はこれがなぜそうなのか混乱していて、次のコードを使用してjsFiddleでいくつかのテストを行いました
HTML
<form>
<input name=a type=number value='' oninput='checka();'>
<input name=b type=number value='' oninput='checkb(this);'>
</form>
Javascript
function checka() {
alert(isNaN(document.forms[0].a.value));
}
function checkb(A) {
alert(isNaN(this.value));
}
私はその結果に呆然としている。このchecka
関数は通常、「5」が入力されるとfalse、「a」が入力されるとtrueを与えるように機能します。ただし、このcheckb
関数はどちらの場合にも当てはまります。
私はMozillaのドキュメントisNaN
から、入力が数値であるかどうかをチェックする前に、関数が最初に型変換を行う可能性があることを理解しています。
紛らわしい特殊なケースの動作
isNaN関数仕様の非常に初期のバージョン以来、非数値引数に対するその動作は混乱を招きました。isNaN関数の引数が数値でない場合、値は最初に数値に強制変換されます。次に、結果の値をテストして、NaNであるかどうかを判断します。したがって、数値型に強制変換すると有効な非NaN数値(特に、強制変換すると数値が0または1になる空の文字列とブールプリミティブ)になる非数値の場合、「false」の戻り値は予期しないものになる可能性があります。たとえば、空の文字列は確かに「数字ではありません」。混乱は、「数値ではない」という用語が、IEEE-794浮動小数点値として表される数値に対して特定の意味を持っているという事実から生じています。関数は、質問に答えるものとして解釈する必要があります。
これは私が見ている現象を説明するのにどのように役立ちますか?それとも、これは型変換に関係のない別の形の混乱ですか?