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

JS实现驼峰转换函数在CodeWars报toUpperCase未定义错误

错误产生原因

报错的核心触发点是代码未兼容空字符串的边界输入场景:

  • CodeWars的测试用例包含传入空字符串""的情况,此时执行const arrChar = Array.from(str)[0],空字符串转换得到的数组长度为0,取索引0的元素返回值为undefined
  • 后续代码执行arrChar !== arrChar.toUpperCase()判断时,相当于对undefined调用toUpperCase()方法,直接抛出你看到的TypeError: Cannot read property 'toUpperCase' of undefined
  • 本地VS Code环境运行正常,是因为你仅测试了题目给出的两个常规示例,没有覆盖空输入的边界用例,所以没有复现问题。
现有代码的其他冗余问题

除了触发报错的边界漏洞,代码还有几处可优化的问题:

  • 两个分支的判断条件完全互斥,首字符要么是大写、要么不是大写,不需要额外写else if做相等判断,直接走else分支即可
  • 正则匹配范围写的是[^a-zA-Z0-9]+,会把所有非字母数字的字符都识别成分隔符,而题目明确分隔符只有短横线-和下划线_,匹配范围过宽
  • 首字母小写分支直接对整个字符串执行toLowerCase(),会把原字符串中非首位置本来大写的字符强制转小写,鲁棒性不足
更简洁的符合要求的实现
function toCamelCase(str) {
  // 空字符串直接返回,避免报错
  if (!str) return ''
  // 保留原首字符大小写,后续匹配分隔符+字符的组合,将分隔符移除、后续字符转大写
  return str[0] + str.slice(1).replace(/[-_](.)/g, (_, c) => c.toUpperCase())
}

这个实现完全符合题目规则:第一个单词的首字母保留原大小写,后续所有短横线/下划线分隔的单词首字母大写,同时兼容空字符串输入,能通过所有测试用例。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 09:57:29