toUpperCase方法不生效排查:单词首字母大写功能无报错失效
问题分析与修复方案
我帮你排查了这段代码,发现几个核心问题导致首字母大写的逻辑没生效,咱们一个个说:
错误1:原型方法里误用了外部变量
str,而非实例本身
你在String.prototype.toCase里直接用了外部定义的str,但原型方法的核心是操作调用它的字符串实例,应该用this来指代当前字符串。比如当你调用"hello world".toCase()时,this就是"hello world",而不是外部的str变量。错误2:
toUpperCase()没有赋值回数组
JavaScript里的字符串是不可变的,arrayWord[i+1].toUpperCase()只会返回一个新的大写字符,不会修改原数组里的元素。你需要把这个返回值重新赋值给数组对应的位置,也就是arrayWord[i+1] = arrayWord[i+1].toUpperCase()。错误3:没处理第一个单词的首字母
你的代码只处理了空格后面的字母,但第一个单词的首字母没有做大写处理,这会导致第一个单词还是小写开头。
另外还有个潜在问题:当循环到最后一个字符时,i+1会超出数组长度,虽然不会报错,但逻辑上没必要处理这个情况,可以调整循环条件或者做判断。
修正后的代码:
String.prototype.toCase = function () { // 用this获取当前字符串实例,转成数组 let arrayWord = this.split(""); // 先处理第一个单词的首字母 if (arrayWord.length > 0) { arrayWord[0] = arrayWord[0].toUpperCase(); } for (let i = 0; i < arrayWord.length; i++) { if (arrayWord[i] === " " && i + 1 < arrayWord.length) { // 赋值回数组,同时判断i+1不越界 arrayWord[i+1] = arrayWord[i+1].toUpperCase(); } } let result = arrayWord.join(""); return result; }; // 测试一下 let str = "insert string here"; console.log(str.toCase()); // 输出 "Insert String Here"
内容的提问来源于stack exchange,提问作者sacora
相关产品推荐
相关产品推荐

