You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无内置函数实现字符串大小写转换: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:27:32