JS判断输入数字大小代码异常:不同位数数字对比结果错误如何修复?
问题原因
从input元素的value属性获取到的值永远是字符串类型,哪怕你给input设置了type="number"也不例外。你代码里直接用>比较两个字符串,会按字符的Unicode编码逐位对比:
- 对比
"2"和"55"时,首先比对第一位字符"2"和"5"的Unicode值,"2"的编码大于"5",所以判断"2">"55"为真,返回了错误结果。 - 位数相同的时候比如
"2"和"3",逐位对比的结果刚好和数字大小逻辑一致,所以你会觉得这部分场景结果正确。
修复方案
在比较前先把两个值转换为数字类型即可,可使用Number()构造函数完成转换,同时兼容整数、小数的判断场景。
修复后的JS代码如下:
function biggerOne() { // 转换为数字类型后再进行比较 var x = Number(document.getElementById("firstNumber").value); var y = Number(document.getElementById("secondNumber").value); if (x > y) { document.getElementById("Result").innerHTML = x; } else { document.getElementById("Result").innerHTML = y; } }
另外你的HTML代码里还有两处可优化的点:
- 第一个input标签末尾有多余的乱码字符
ر,建议删除 <p>标签本身没有原生的value属性,你写的value=""属于无效属性,可以直接移除
内容的提问来源于stack exchange,提问作者JafarMrt
相关产品推荐
相关产品推荐

