为什么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
相关产品推荐
相关产品推荐

