我正在寫一個HTML表單,如果輸入是一個數字,它會做一些簡單的計算。但是,我的號碼輸入不被javascript函數視爲一個數字。我很困惑,爲什麼會是這樣,並使用下面的代碼isNaN給出了令人困惑的結果
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));
}
我對結果目瞪口呆做了一些測試與jsFiddle。當輸入'5'時,checka
函數正常工作,假如輸入'a',則爲真。但是,checkb
函數在兩種情況下都是正確的。
我從Mozilla documentation明白isNaN
功能可能會做類型轉換首先檢查是否由於輸入的是數字或不前:
混淆特殊情況的行爲
由於在非常早的版本isNaN函數規範, 其對非數字參數的行爲一直令人困惑。當isNaN函數的參數 不是數字時,該值首先被強制爲一個數字 。然後測試結果值以確定 是否爲NaN。因此,對於強制爲數字 類型的非數字,會生成有效的非NaN數值(特別是空字符串 和布爾基元,當強制給出數值0或 之一)時,「假」返回值可能會意想不到的;例如,空字符串 肯定「不是數字」。該混淆源於事實,即「不是數字」一詞對於表示爲IEEE-794浮點值的數字 具有特定含義。函數應該是 解釋爲回答問題,「是這個值,當強制爲 的數值時,IEEE-794的'非數字'值?」
這有助於解釋我所看到的現象嗎?或者這是另一種與類型轉換無關的混淆形式?
難道你不是指在'checkb'中的'A.value'? – 2012-08-06 15:36:25
啊,是的,我的錯。 – 2012-08-06 15:38:10