JavaScript中逻辑运算符&&无法正常工作的问题排查
问题原因及修复方案
你的问题核心是**prompt()返回的是字符串类型,而你用松散相等==和数字比较时,可能发生意外的隐式类型转换**,另外还有一处变量未定义的问题,具体如下:
1. 逻辑判断失效的根本原因
prompt()函数的返回值始终是字符串(用户点击取消时返回null),当你用==和数字比较时,JavaScript会自动尝试类型转换,但这种转换可能不符合预期:
- 比如如果用户在
question3中输入了可被转换成数字3的内容(比如字符串"3"),会导致obj.question3==3为true,从而触发整个条件; - 更严谨的做法是统一类型后再做判断,要么把输入转换成数字,要么用严格相等
===(要求类型和值都匹配)。
2. 修复后的代码
function getRandom() { let text = "Answer"; // 将prompt返回的字符串转为数字,无法转换时得到NaN const obj = { question1: Number(prompt('How many Stars are there in our solar system?', text)), question2: Number(prompt('How many Moon does Mars have?', text)), question3: Number(prompt('How many Moons do we have?', text)), }; // 使用严格相等===,避免隐式类型转换 if (((obj.question1 === 1) && (obj.question2 === 2)) || (obj.question3 === 3)) { const oldVal = 'Name'; const name = prompt("Write your name:", oldVal); // 补全value变量定义(原代码中未定义) const value = 1000000; // 示例金额,可根据需求修改 if (name === "") { } else if (name === oldVal) { } else if (name) { alert(`Congrats ${name}!!! You just won ${value}$🎉🥳`); } else { alert("You just missed the golden chance to become a billionaire😮"); } } else { alert("Sorry"); } }
3. 关键修复点
- 将
prompt()的返回值用Number()转为数字类型,确保和判断的数字类型一致; - 把松散相等
==替换为严格相等===,杜绝隐式类型转换带来的意外; - 补全了原代码中未定义的
value变量,避免弹窗时出现报错。
内容的提问来源于stack exchange,提问作者Muhammad Umer Farooq
相关产品推荐
相关产品推荐

