疑问:自定义字符串转小写函数未生效,求故障原因解析
问题分析:为什么你的字符串转小写代码未生效?
嗨,我来帮你拆解下问题的核心原因~
在JavaScript里,字符串是不可变(immutable)的值类型——这意味着你没办法直接修改字符串中的单个字符。哪怕你在代码里写了string[i] = lower,这个赋值操作实际上不会对原字符串产生任何影响,原字符串会保持原样。
你的代码问题点
虽然你判断string[i] !== lower的条件是成立的,但赋值string[i] = lower根本无法改变传入的原字符串,所以最后打印的str还是初始的aAaA。
解决方案
这里给你两种可行的修复方式:
方式1:转数组修改后转回字符串
把字符串转换成数组(数组是可变的),修改数组元素后再拼接回字符串:
let str = 'aAaA'; const makeLowerCase = (string) => { const strArr = string.split(''); // 将字符串拆分为字符数组 for (var i = 0; i < strArr.length; i++) { let lower = strArr[i].toLowerCase(); if (strArr[i] !== lower) { strArr[i] = lower; // 这里可以直接修改数组元素 } } return strArr.join(''); // 将数组重新拼接为字符串 } console.log('before', str); str = makeLowerCase(str); // 接收返回的新字符串 console.log('after', str); // 输出: after aaaa
方式2:直接使用内置的toLowerCase()方法
其实JavaScript已经内置了一键转小写的方法,完全不用自己写循环,更简洁:
let str = 'aAaA'; console.log('before', str); str = str.toLowerCase(); // 直接调用内置方法得到全小写字符串 console.log('after', str); // 输出: after aaaa
这样就能达到你想要的把字符串全部转为小写的效果啦~
内容的提问来源于stack exchange,提问作者208_man
相关产品推荐
相关产品推荐

