使用else if语句判断字符为大写、小写或数字的问题排查
根因分析
你代码中数字判断分支无法触发的核心原因是严格相等运算符(===)会同时校验值与数据类型:prompt返回的所有输入结果均为字符串类型,经parseInt转换得到的userNumber为数字类型,两种不同类型的值用===对比永远返回false,因此该分支始终无法命中。
此外原代码的字母判断逻辑存在漏洞:数字、特殊符号调用toUpperCase()/toLowerCase()方法后会返回自身,会被前两个分支误判定为大写字母。
修复方案
调整判断顺序优先校验数字,同时补充字母的字符范围校验避免误判,修复后代码如下:
let letterOrNumber = prompt("请输入大写字母、小写字母或数字"); let userNumber = parseInt(letterOrNumber) // 优先判断是否为有效数字 if (!isNaN(userNumber)) { console.log(letterOrNumber + " 是数字。"); } // 判断大写字母:需同时满足转大写等于自身、且在A-Z字符范围内 else if (letterOrNumber === letterOrNumber.toUpperCase() && letterOrNumber >= 'A' && letterOrNumber <= 'Z') { console.log(letterOrNumber + " 是大写字母。"); } // 判断小写字母:需同时满足转小写等于自身、且在a-z字符范围内 else if (letterOrNumber === letterOrNumber.toLowerCase() && letterOrNumber >= 'a' && letterOrNumber <= 'z') { console.log(letterOrNumber + " 是小写字母。"); } else { console.log(letterOrNumber + " 不是字母或数字"); }
内容的提问来源于stack exchange,提问作者Sierszo
相关产品推荐
相关产品推荐

