无内置函数实现字符串大小写转换:upcase函数调试求助
解决字符串大小写转换函数的问题
嘿,我帮你排查下这个upcase函数的问题,咱们一步步来修正:
先说说你的代码里存在的几个问题:
- 变量混用+未声明:你初始化的结果变量是
up,但循环里却一直在给未声明的temp赋值,这不仅会导致结果为空,还可能产生意外的全局变量。 - 字符与ASCII码直接比较:
string[x]是字符串类型,直接和数字(比如97、122)比较是无效的,得用charCodeAt(x)方法获取字符对应的ASCII码值才能正确比较。 - 转换后未转回字符:你直接把
string[x] - 32这样的数字拼接到字符串里,最终得到的是数字串而不是大写字符,需要用String.fromCharCode()把ASCII码转回对应的字符。 - 逻辑与函数名不符:函数名叫
upcase(转大写),但你写了大写转小写的逻辑,这会让原本的大写字母被转成小写,和函数目标矛盾。 - 遗漏非字母字符:遇到空格、数字这类非字母字符时,你的代码没有处理,会直接丢弃这些字符。
修正后的upcase函数(实现将字符串转为全大写):
function upcase(string) { var up = ''; for (var x = 0; x < string.length; x++) { var charCode = string.charCodeAt(x); // 小写字母转大写 if (charCode >= 97 && charCode <= 122) { up += String.fromCharCode(charCode - 32); } // 大写字母直接保留 else if (charCode >= 65 && charCode <= 90) { up += string[x]; } // 非字母字符直接保留 else { up += string[x]; } } return up; }
如果你的需求是大小写互换(而不是单纯转大写),可以改成这样:
function swapCase(string) { var result = ''; for (var x = 0; x < string.length; x++) { var charCode = string.charCodeAt(x); if (charCode >= 97 && charCode <= 122) { result += String.fromCharCode(charCode - 32); } else if (charCode >= 65 && charCode <= 90) { result += String.fromCharCode(charCode + 32); } else { result += string[x]; } } return result; }
你可以测试下这两个函数,应该就能正常运行啦~
内容的提问来源于stack exchange,提问作者user9656487
相关产品推荐
相关产品推荐

