请帮我排查这段判断观影资格的JavaScript代码存在的问题
你的这段JavaScript代码存在这些问题,我来逐一拆解:
类型不匹配引发的逻辑偏差:
prompt()返回的是字符串类型,你直接拿它和数字13做比较(age >= 13),会触发JS的隐式类型转换,容易出现不符合预期的结果。比如用户输入"abc"这种非数字内容,转成数字会变成NaN,NaN >=13的结果是false,但这属于无效输入,不是真实的年龄判断。松散相等的匹配漏洞:你用
accompanied == "Yes"做判断,首先==是松散相等,可能出现意外类型转换;更关键的是用户输入未必严格符合"Yes"格式——比如输入"yes"、"YES"、" yes "(带空格),这些都会被判定为false,和实际需求不符。语法错误:你的
else代码块缺少闭合的大括号},这会直接导致代码无法运行,浏览器会抛出语法报错。缺失输入有效性校验:没有处理用户点击取消(
prompt会返回null)、输入空字符串的情况,这些场景下代码逻辑会直接出错。
这里是修正后的代码,解决了上述所有问题:
// 判断用户年龄是否≥13或有成人陪同 var ageInput = prompt("How old are you"); var accompaniedInput = prompt("Are you accompanied by an adult"); // 处理年龄输入:转数字,兼容无效输入 var age = ageInput ? parseInt(ageInput, 10) : NaN; // 处理陪同输入:统一格式,兼容取消/空输入 var isAccompanied = accompaniedInput ? accompaniedInput.trim().toLowerCase() === "yes" : false; // 先校验输入有效性,再执行核心逻辑 if (!isNaN(age) && (age >= 13 || isAccompanied)) { console.log("You may see the movie"); } else { // 可选:区分无效输入和不符合条件的情况 if (isNaN(age)) { console.log("Please enter a valid age number."); } else { console.log("You can not see the movie"); } }
内容的提问来源于stack exchange,提问作者FTX289
相关产品推荐
相关产品推荐

