JavaScript中使用isNaN的prompt输入while循环无法退出如何解决?
问题原因
- 循环内部仅调用了
prompt获取用户新输入,但没有将新输入的结果赋值给外层的userSalary变量,isNaN判断的始终是第一次执行prompt得到的初始值,只要第一次输入不是有效数字,后续所有输入都不会触发变量更新,循环永远无法满足终止条件。 - 补充注意:
prompt的返回值始终为字符串类型,isNaN对字符串类型的校验存在边界漏洞,例如空字符串、全空格字符串会被隐式转换为0,被误判为有效数字。
修复方案
基础修复(仅解决无法跳出循环的问题)
将循环内的prompt返回值赋值给userSalary,更新判断条件依赖的变量:
var userSalary = prompt("请输入你的薪资:") while(isNaN(userSalary)){ userSalary = prompt("输入不合法,请输入数字:") } alert("校验通过!")
优化校验(解决边界值误判问题)
增加空值校验、显式转换数值,避免空输入、全空格输入被误判为有效数字:
var userSalary = prompt("请输入你的薪资:") while(userSalary.trim() === '' || isNaN(Number(userSalary))){ userSalary = prompt("输入不合法,请输入有效数字:") } alert("校验通过!")
内容的提问来源于stack exchange,提问作者user11838329
相关产品推荐
相关产品推荐

