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

为什么JavaScript无法通过索引直接修改数组内字符串的首字母

第一种字符串首字母大写实现失效的底层原因

你给出的失效代码如下:

function capitalize(array){
  for (let i = 0; i < array.length; i++){
    array[i][0] = array[i][0].toUpperCase() 
  }
  return lst;
}

可正常运行的修复版本如下:

function capitalize(array){
  for (let i = 0; i < array.length; i++){
    array[i] = array[i][0].toUpperCase() + array[i].slice(1) 
  }
  return array;
}

核心问题1:JavaScript 字符串为不可变原始值

  • JavaScript中的字符串属于原始值类型,一旦创建就无法修改内部的任意字符。你通过array[i][0]的方式访问字符串的单个字符,只能完成读操作,赋值操作是静默失效的(严格模式下会直接抛出TypeError)。
    示例验证:
let str = "test";
str[0] = "T";
console.log(str); // 输出依然是 "test",赋值未生效

第一种写法尝试直接修改字符串的第0位字符,本身就是不被JS允许的操作,自然不会生效。

核心问题2:返回值变量未定义

第一个函数的参数命名为array,但最后返回的是未声明的变量lst,代码运行到这里会直接抛出ReferenceError: lst is not defined的错误,这也是代码无法正常运行的直接原因之一。

第二种写法可行的原因

第二种写法没有尝试修改原有字符串,而是通过首字母大写+剩余字符拼接,生成了一个全新的字符串,再将这个新字符串直接赋值给数组的对应位置,属于对数组元素的合法重赋值,所以可以正常生效。


内容的提问来源于stack exchange,提问作者João Verçosa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 18:06:02