如何在if条件中比较数字?代码直接用0704比较失效问题咨询
问题分析与解决方案
你的数字比较方式确实存在两个关键错误:
以
0开头的数字字面量会被解析为八进制数
在JavaScript里,旧版语法中以0开头的数字会被当作八进制处理,0704转成十进制是452,这和你实际想要的PIN码0704完全不是同一个值——哪怕用户输入0704,也不可能和452匹配。prompt返回的是字符串类型
用户通过prompt输入的内容,不管输入的是数字还是字母,都会以字符串形式返回。你拿字符串和数字直接用!==比较,因为类型不同,结果永远是true,所以永远走错误分支。
为什么换成字符串就正常?
当你把PIN设为字符串"0704",同时将输入和这个字符串比较时,会精确匹配每一位字符(包括前导零),而且类型一致,自然能正确判断是否匹配。
修正后的代码示例
推荐的字符串方案(保留前导零,符合PIN码场景)
let pin = "0704"; let count = 0; for (let i = 1; i <= 4; i++) { let input = prompt('please make a guess'); if (input !== pin ) { console.log('Sorry that was wrong'); count++; } else { console.log('That was correct!') break; } }
数字方案(仅适用于不需要前导零的场景)
如果你的PIN不需要前导零(比如实际是704),可以这样写:
let pin = 704; let count = 0; for (let i = 1; i <= 4; i++) { let input = prompt('please make a guess'); // 将输入转为十进制数字 let inputNum = parseInt(input, 10); if (inputNum !== pin ) { console.log('Sorry that was wrong'); count++; } else { console.log('That was correct!') break; } }
内容的提问来源于stack exchange,提问作者Jeffy
相关产品推荐
相关产品推荐

