为什么我的JavaScript查找奇数的程序在起始值为5时运行异常?
问题根因
prompt()函数的返回值默认为字符串类型,代码中未做类型转换就直接用于循环判断和运算,是异常的根本原因。- 输入起始值1、结束值10时正常运行的逻辑:
两个输入值均为字符串,首次循环判断i <= eValue等价于"1" <= "10",按字符串字典序比对结果为真。进入循环后执行i++,递增运算符会自动将字符串类型的i转换为数值类型,后续判断变为数值和字符串的比对,JS会自动把字符串"10"转为数值10,逻辑刚好符合预期。 - 输入起始值5时无法运行的逻辑:
首次循环判断等价于"5" <= "10",按字符串字典序比对时,优先取首位字符的Unicode编码比较,"5"的编码为53,"1"的编码为49,直接判定"5" > "10",循环条件不成立,不会进入循环执行,最终得到空数组。
修复方案
将两个prompt的返回值显式转换为数值类型即可,可根据需要补充非数字输入的校验逻辑,参考代码如下:
var odd = []; // 也可以用+号简写转换:var sValue = +prompt("start") var sValue = Number(prompt("start")); var eValue = Number(prompt("end")); // 可选:非数字输入校验 if (isNaN(sValue) || isNaN(eValue)) { alert("请输入合法的数字"); } else { for (var i = sValue; i <= eValue; i++) { if (i % 2 !== 0) { odd.push(i); } } alert(odd); }
内容的提问来源于stack exchange,提问作者Danuja
相关产品推荐
相关产品推荐

