为何JavaScript字符串反转函数未生效?同逻辑C语言可正常运行
JavaScript字符串反转无效的原因及修复方案
核心问题是:JavaScript中的字符串是不可变值类型,你直接通过下标修改字符串的操作不会生效,这和C语言里字符数组(可变)的逻辑完全不同。
看你的代码:
let res=str;
这里res只是原字符串的引用,不是可修改的数组。当你执行res[i] = res[res.length-i-1]这类操作时,JavaScript不会报错,但实际上根本不会改变原字符串的内容,所以最后返回的还是初始的原字符串。
修复方案
把字符串转换成可修改的字符数组,完成交换逻辑后再转回字符串:
function reverse(str) { let res = str.split(''); // 将字符串拆分为字符数组 for(let i = 0; i < str.length/2; i++) { let temp = res[i]; res[i] = res[res.length-i-1]; res[res.length-i-1] = temp; } return res.join(''); // 将字符数组合并为字符串 } console.log(reverse("anil")); // 输出: lina
如果想更简洁,也可以用JavaScript内置方法实现:
function reverse(str) { return str.split('').reverse().join(''); }
为什么C语言能成功?
C语言中的字符串是以char[]字符数组的形式存储的,数组的元素可以直接通过下标修改,所以你的交换逻辑能直接改变数组内容,最终实现反转。而JavaScript的字符串是不可变对象,所有看似修改的操作都会生成新字符串,而非修改原对象本身。
内容的提问来源于stack exchange,提问作者A.kumar
相关产品推荐
相关产品推荐

