JavaScript条件判断不准确,大于10的数字比较结果异常如何解决?
问题原因
prompt()方法的返回值默认是字符串类型,直接对两个字符串做大小比较时,执行的是字典序比较规则,而非数值大小比较- 以
"10"和"5"对比为例:字符串比较会逐位判断字符的Unicode编码大小,第一个字符'1'的编码小于'5',因此直接判定"10" < "5",最终输出错误的结果5 - 10以内的数字可以正常比对的原因是:单个数字字符的Unicode编码顺序和数值大小顺序完全一致,不会出现比对偏差
修复方案
在拿到输入值后先转换为数值类型再做比较即可,同时可以优化参数校验逻辑,避免输入非数字的场景报错,修复后代码如下:
var firstScore = Number(prompt('First exam score?')); var secondScore = Number(prompt('Second exam score?')); if (isNaN(firstScore) || isNaN(secondScore)) { console.log('Wrong parameter'); } else if (firstScore > secondScore) { console.log(firstScore); } else if (secondScore > firstScore) { console.log(secondScore); } else { console.log('Two scores are equal'); }
内容的提问来源于stack exchange,提问作者troubledcoder
相关产品推荐
相关产品推荐

