JavaScript投票程序整数判断出现NaN,输入1提示无效响应求助
问题原因及解决方案
核心问题1:prompt返回字符串类型,未转为数字
prompt()函数获取的用户输入是字符串类型,即便你输入数字1,得到的也是"1"而非1。虽然JavaScript会做隐式类型转换,但这种转换不稳定:比如当你用answer == Math.floor(answer)时,若输入的字符串无法被解析为有效数字(比如带空格或非数字字符),Math.floor()会返回NaN,直接导致条件判断不成立,触发Invalid Response。
核心问题2:条件范围错误
你的选项是0-3,但代码里写的是answer <=4,这会允许输入无效选项4;同时缺少对NaN的判断,当输入无法转成数字时,会直接进入else分支。
核心问题3:this指向错误
代码中使用this.answers,但后续打印的是poll.answers,说明this并未指向poll对象,导致this.answers可能不存在,执行this.answers[answer] +=1时会得到NaN。
修复后的代码示例
// 先初始化poll对象,确保answers数组存在 const poll = { answers: [0, 0, 0, 0], vote: function() { // 将prompt输入转为数字 let answer = Number(prompt(`What is your favourite programming language?\n0: JavaScript\n1: Python\n2: Rust\n3: C++\n(Write option number)`)); // 修正条件:先判断是否为有效数字,再检查范围和整数 if (!isNaN(answer) && answer >= 0 && answer <= 3 && answer === Math.floor(answer)) { // 直接使用poll.answers,避免this指向问题 poll.answers[answer] += 1; console.log(poll.answers); } else { console.log(`Invalid Response`); } } }; // 调用投票方法 poll.vote();
关键修复点
- 用
Number()将输入转为数字类型,确保后续判断基于数字而非字符串 - 添加
!isNaN(answer)判断,排除无效输入导致的NaN情况 - 将条件范围改为
answer <=3,匹配实际选项 - 直接使用
poll.answers替代this.answers,明确指向目标对象,避免this指向混乱
内容的提问来源于stack exchange,提问作者PMMeThatTummyGirl
相关产品推荐
相关产品推荐

