JavaScript字符串替换函数异常:替换指定字符为*却返回原字符串
问题分析与解决方案
嘿,我来帮你排查下代码里的问题,其实有两个关键点导致你的函数没生效:
1. 拼写错误:lenght → length
你代码里写的是phrase.lenght,这是个低级拼写错误!正确的字符串长度属性是length。因为这个错误,循环条件i < phrase.lenght其实是i < undefined,结果为false,循环根本没执行,直接返回了原字符串。
2. JavaScript字符串是不可变的
就算你修正了拼写,直接通过phrase[i] = '*'修改字符也是没用的——在JS里,字符串属于原始值,它们是不可变的,你没法直接通过索引修改字符串里的单个字符。
修正方案
方案一:转成数组修改(循环方式)
先把字符串转换成数组(数组是可变的),修改完成后再转回字符串:
function changingLetters(phrase, letter) { // 将字符串拆分为字符数组 const charArray = phrase.split(''); // 遍历数组,替换目标字符 for (let i = 0; i < charArray.length; i++) { if (charArray[i] === letter) { charArray[i] = '*'; } } // 将数组重新拼接为字符串 return charArray.join(''); } console.log(changingLetters('This is a test','s')); // 输出:Thi* i* a te*t
方案二:使用replace方法(更简洁)
利用字符串的replace方法结合正则表达式,实现全局替换,代码更简洁:
function changingLetters(phrase, letter) { // 构造全局匹配的正则表达式,替换所有匹配的字符 return phrase.replace(new RegExp(letter, 'g'), '*'); } console.log(changingLetters('This is a test','s')); // 输出:Thi* i* a te*t
如果需要忽略大小写匹配,可以把正则的标志改成'gi'。
内容的提问来源于stack exchange,提问作者Pedro de Andrade
相关产品推荐
相关产品推荐

