reverse() 直接修改原数组而非返回新数组仅反转第一层元素顺序对稀疏数组保留空位与sort()混用时可能放大排序不稳定性。reverse() 会直接改原数组不是返回新数组很多人以为 reverse() 像 map() 或 filter() 那样返回新数组结果发现原数组“莫名其妙”变了——它确实会就地反转不创建副本。这是它的设计行为不是 bug。常见错误现象– 对同一个数组多次调用 reverse()结果来回翻转– 把 arr.reverse() 赋值给新变量后还去读 arr却发现它已经反了– 在函数里传入数组并调用 reverse()外部数组被意外修改如果需要新数组必须手动复制用 [...arr].reverse()、arr.slice().reverse() 或 Array.from(arr).reverse()slice() 是最兼容的写法IE9[...arr] 更简洁但需 ES2015 环境注意JSON.parse(JSON.stringify(arr)).reverse() 不适用于含函数、undefined、Date、RegExp 的数组慎用reverse() 只反转第一层不递归处理嵌套数组它只按索引顺序倒排元素位置不管每个元素内部是什么。哪怕数组里全是数组也只是把那些子数组整体挪位置不会深入每个子数组内部去翻转。使用场景举例– 你想让日志条目按时间倒序显示数组元素是对象或字符串reverse() 就够用– 但如果你有一个矩阵 [[1,2], [3,4], [5,6]]调用 reverse() 得到的是 [[5,6], [3,4], [1,2]]不是 [[6,5], [4,3], [2,1]]要深度反转比如每行也翻转得自己遍历arr.reverse().map(row row.reverse())注意 map() 返回新数组但 row.reverse() 仍会改原 row如需完全不改原数据写成 row.slice().reverse()性能上嵌套越深、数组越大手写循环比链式调用更可控reverse() 在稀疏数组中的表现容易被忽略稀疏数组比如用 arr[100] x 创建的、中间大量空位的数组调用 reverse() 后空位仍为空位只是位置颠倒了。它不补空值也不跳过——空位跟着索引一起“翻过去”。 Mokker AI AI产品图添加背景