javascript数组reverse()方法会直接修改原数组,返回原数组引用;需保留原数组时应先用展开运算符或slice()复制再反转;字符串无reverse()方法,须split("")转数组后反转再join()。

是的,JavaScript 数组的 reverse() 方法会直接修改原数组。
原地反转,不创建新数组
reverse() 是一个“原地”(in-place)方法,它不会返回副本,而是直接翻转调用它的数组元素顺序,并返回该数组的引用(也就是原数组本身)。
- 调用后,原数组的索引顺序完全颠倒,首尾互换,第二个与倒数第二个互换,依此类推;
- 返回值虽然也是这个数组,但不是新数组——它和原变量指向同一块内存;
- 如果后续还依赖原始顺序,必须提前备份,否则数据就不可逆地改变了。
如何避免改变原数组
如果需要保留原数组不变,可以先复制一份再调用 reverse():
- 用展开运算符:
[...arr].reverse(); - 用
slice():arr.slice().reverse(); - 用
concat():arr.concat().reverse()(较老写法,不推荐); - 注意:
Array.from(arr).reverse()也有效,但性能略低于展开运算符。
实际例子对比
看看代码行为差异:
const arr = [1, 2, 3]; const reversed = arr.reverse(); console.log(arr); // [3, 2, 1] ← 原数组已变 console.log(reversed); // [3, 2, 1] ← 和 arr 是同一个数组 console.log(arr === reversed); // true
而使用拷贝方式:
const arr = [1, 2, 3]; const reversed = [...arr].reverse(); console.log(arr); // [1, 2, 3] ← 保持不变 console.log(reversed); // [3, 2, 1] ← 新数组 console.log(arr === reversed); // false
注意字符串不能直接 reverse
字符串是不可变的,没有 reverse() 方法。常见误写 "hello".reverse() 会报错。正确做法是转成数组、反转、再 join:
-
"hello".split("").reverse().join("")→"olleh"; - 别忘了
split("")才能按字符拆成数组,split()默认按空字符串分割,但空参等价于split(",")?不对——split()无参时返回[""],所以必须写split("")。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











