JavaScript替换含'>>'字符串指定位置字符为'>'时结果异常的问题咨询
JavaScript替换含'>>'字符串指定位置字符为'>'时结果异常的问题咨询
嘿,我来帮你捋捋这个问题——你完全没写错代码,是浏览器/终端控制台的输出搞的鬼!
先给你吃个定心丸:你用substr1.concat(replacementChar).concat(substr2)生成的字符串,实际上就是你期望的>>>H.23..H.2,只是控制台的显示逻辑坑了你一把。
为什么会这样?很多控制台(比如Chrome DevTools的控制台、Node.js的终端控制台)会把开头的连续>符号当成类似命令行提示符的特殊标记,做了自动格式化或者“吞掉”的处理,导致你看起来输出变成了>H.23..H.2,但真实的字符串内容根本没少。
你可以做个小验证:把console.error(c)改成console.log(JSON.stringify(c)),或者直接打印字符串的长度,你会发现长度是11(和原字符串长度一致),这就说明字符串本身是完整的,只是显示出了问题。
另外,你换Y的时候显示正常,只是因为>>Y不是控制台认为的特殊符号,所以就原样输出了。
如果想避免这种控制台显示的坑,或者让字符串处理更直观,你也可以换一种更常用的字符串修改方式(因为JS里字符串是不可变的,转成数组处理会更清晰):
let startStr = ">>.H.23..H.2" let indexToChange = 2 let replacementChar = '>' // 转成数组修改指定位置,再转回字符串 const strArray = startStr.split('') strArray[indexToChange] = replacementChar const result = strArray.join('') // 用JSON.stringify确保看到真实的字符串内容 console.log(JSON.stringify(result)) // 会输出 "\">>>H.23..H.2\"" console.log(result.length) // 输出11,和预期一致
再总结下:你的代码逻辑100%正确,问题出在控制台对开头连续>的特殊渲染,不是JavaScript本身对>>>有什么特殊处理,放心用你的代码就行,换个方式查看结果就能看到正确内容啦。
备注:内容来源于stack exchange,提问作者Garry
相关产品推荐
相关产品推荐

