我正在编写一个 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”时为假,输入“a”时为真。但是,该checkb
函数对这两种情况都成立。
我从Mozilla 文档中了解到,isNaN
函数可能会在检查输入是否为数字之前先进行类型转换:
令人困惑的特殊情况行为
自 isNaN 函数规范的最早版本以来,它对非数字参数的行为一直令人困惑。当 isNaN 函数的参数不是数字时,首先将值强制转换为数字。然后测试结果值以确定它是否为 NaN。因此,对于非数字,当强制转换为数字类型时会产生有效的非 NaN 数值(尤其是空字符串和布尔基元,当强制转换为数字值 0 或 1)时,“false”返回值可能是意料之外的;例如,空字符串肯定是“不是数字”。混淆源于这样一个事实,即“不是数字”一词对于表示为 IEEE-794 浮点值的数字具有特定含义。该功能应解释为回答问题,
这如何帮助解释我所看到的现象?或者这是与类型转换无关的另一种混淆形式?