JavaScript titleCase函数首字符未正确转换为大写的问题排查请求
问题排查与修复
你遇到的问题根源非常明显——第一个判断条件写错了!
错误原因分析
你原本想判断当前字符的索引是否为0(也就是处理字符串的首字符),但代码里写的是:
if(str[i] == 0)
这行代码的逻辑是:当当前字符等于数字0的时候才转大写,而不是判断索引i是否为0。你的输入字符串首字符是"I",显然不等于0,所以首字符直接进入了else分支被转成小写,这就是输出首字母是i的原因。
修正后的代码
把第一个判断条件改成判断索引i等于0即可,同时建议用严格相等===来避免隐式类型转换的问题:
function titleCase(str) { let newStr = '' for(let i = 0; i < str.length; i++){ if(i === 0){ // 修正为判断索引i为0 newStr += str[i].toUpperCase() } else if (str[i - 1] === ' '){ // 统一使用严格相等判断 newStr += str[i].toUpperCase(); } else { newStr += str[i].toLowerCase(); } } return newStr } console.log(titleCase("I'm a liTTle tea pot")); // 输出: I'm A Little Tea Pot
额外优化建议
如果要处理更复杂的场景(比如字符串开头有空格的情况),可以在循环前先对字符串做预处理,比如用str.trim()去除首尾空格,或者在循环里先跳过开头的空格再处理首字符。不过针对你当前的需求,上面的修正已经能完美解决问题啦。
内容的提问来源于stack exchange,提问作者Thiago Bandeira
相关产品推荐
相关产品推荐

