【发布时间】:2012-08-06 23:35:21
【问题描述】:
我正在编写一个 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 函数在这两种情况下都为 true。
我从Mozilla documentation 了解到isNaN 函数可能会在检查输入是否为数字之前先进行类型转换:
令人困惑的特殊情况行为
自 isNaN 函数规范的最早版本以来, 它对非数字参数的行为一直令人困惑。当。。。的时候 isNaN 函数的参数不是数字,值是第一个 强制到一个数字。然后测试结果值以确定 是否为 NaN。因此,对于强制转换为数字的非数字 键入结果为有效的非 NaN 数值(尤其是空字符串 和布尔原语,当被强制赋予数值零或 一)、“false”返回值可能出乎意料;空字符串, 例如,肯定是“不是数字”。混乱源于 事实上,“不是数字”这个词对数字有特定的含义 表示为 IEEE-794 浮点值。函数应该是 解释为回答问题,“这个值,当被强制 一个数值,一个 IEEE-794 'Not A Number' 值?”
这对解释我所看到的现象有何帮助?或者这是与类型转换无关的另一种混淆形式?
【问题讨论】:
-
你不是说
A.valueincheckb吗?
标签: javascript html