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

FreeCodeCamp标题大小写转换函数:首个if中i++的作用解析

标题大小写转换代码中i++的作用解析

我正在完成FreeCodeCamp的「标题大小写转换」练习,要求返回每个单词首字母大写、其余字母小写的字符串。我编写的代码可正常运行,但不理解为何在第一个if语句中添加i++能修复问题,希望解析这段代码的工作逻辑。我不需要其他实现方案,仅针对当前代码解惑。

我的代码:

function titleCase(str) {
  const toLowerC = str.toLowerCase();
  let word = ""
  for (let i = 0; i < toLowerC.length; i++) {
    
    if (i === 0) {
      word += toLowerC[i].toUpperCase();
      i++  // 为什么添加i++能让代码正常运行?我原本以为第一个和第二个if都不成立时会触发else...
    }
    if (toLowerC[i] === " ") {
      word += toLowerC[i] + toLowerC[i + 1].toUpperCase();
      i++
    } else {
      word += toLowerC[i]
    }
  }
  return word;
}

titleCase("I'm a little tea pot");

核心问题:第一个if里的i++为什么必须加?

先看不加这个i++的错误场景:
循环第一次执行时i=0,第一个if条件成立,把首字母转大写加到word里,但此时i仍然是0。因为这里是两个独立的if(不是else if),第一个if执行完后一定会走第二个if分支:此时toLowerC[0]不是空格,所以进入else,把toLowerC[0](小写的首字母)再次加到word里,导致首字母重复(比如输入"I'm..."会变成"Ii'm..."),结果直接错误。

添加i++后,逻辑就通顺了:

  • 当i=0时,第一个if触发,将首字母大写加入word,然后手动i++让i变成1。
  • 接下来执行第二个if判断,此时i=1对应原字符串的第二个字符(比如"I'm"里的'),不是空格,所以进入else,把这个字符正常加入word,不会重复处理首字母。
  • 循环体执行完毕后,for循环会自动执行i++,让i变成2,进入下一次循环处理第三个字符。

整体代码的工作逻辑梳理

  1. 先把输入字符串全部转成小写存入toLowerC,确保后续大小写处理统一。
  2. 初始化空字符串word用来拼接最终结果。
  3. 循环遍历toLowerC的每个字符:
    • 第一个if(处理字符串首字母):当i=0时,把首字母转大写加入word,手动i++避免后续代码重复处理这个首字母。
    • 第二个if(处理单词间空格):如果当前字符是空格,就把空格加入word,同时把空格后的字符转大写也加进去,然后手动i++——因为已经处理了空格后的字符,所以让i跳过这个字符,避免循环自动递增后再次处理它。
    • else分支(处理普通字符):如果既不是字符串首字母,也不是空格,就直接把当前小写字符加入word。

内容的提问来源于stack exchange,提问作者Dehumanizer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 23:50:01