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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 17:45:38