Array.prototype.reverse()

Baseline 已广泛支持

此特性已相当成熟,可在许多设备和浏览器版本上使用。自 ⁨2015 年 7 月⁩以来,各浏览器均已提供此特性。

reverse() 方法用于 Array 实例,可将数组中的元素原地翻转,并返回对同一数组的引用。数组的第一个元素会变成最后一个,最后一个元素会变成第一个。换句话说,数组中元素的顺序将与之前相反。

要反转数组中的元素而不修改原始数组,请使用 toReversed()

试一试

const array = ["one", "two", "three"];
console.log("array:", array);
// Expected output: "array:" Array ["one", "two", "three"]

const reversed = array.reverse();
console.log("reversed:", reversed);
// Expected output: "reversed:" Array ["three", "two", "one"]

// Careful: reverse is destructive -- it changes the original array.
console.log("array:", array);
// Expected output: "array:" Array ["three", "two", "one"]

语法

js
reverse()

参数

无。

返回值

返回对原始数组的引用,该数组已被反转。请注意,数组是原地反转的,不会创建副本。

描述

reverse() 方法会原地修改调用它的数组对象,并返回对该数组的引用。

reverse() 方法会保留空位。如果源数组是稀疏的,则空位对应的新的索引会被删除,并也成为空位。

reverse() 方法是通用的。它只期望 `this` 值具有 `length` 属性和整数键属性。虽然字符串也是类数组的,但此方法不适用于字符串,因为字符串是不可变的。

示例

反转数组中的元素

以下示例创建一个名为 `items` 的数组,其中包含三个元素,然后反转该数组。调用 `reverse()` 会返回对反转后的数组 `items` 的引用。

js
const items = [1, 2, 3];
console.log(items); // [1, 2, 3]

items.reverse();
console.log(items); // [3, 2, 1]

reverse() 方法返回对同一数组的引用

reverse() 方法返回对原始数组的引用,因此修改返回的数组也会修改原始数组。

js
const numbers = [3, 2, 4, 1, 5];
const reversed = numbers.reverse();
// numbers and reversed are both in reversed order [5, 1, 4, 2, 3]
reversed[0] = 5;
console.log(numbers[0]); // 5

如果您希望 `reverse()` 不修改原始数组,而是返回一个像其他数组方法(例如 map())一样的浅拷贝数组,请使用 toReversed() 方法。或者,您可以在调用 `reverse()` 之前进行浅拷贝,方法是使用展开语法Array.from()

js
const numbers = [3, 2, 4, 1, 5];
// [...numbers] creates a shallow copy, so reverse() does not mutate the original
const reverted = [...numbers].reverse();
reverted[0] = 5;
console.log(numbers[0]); // 3

在稀疏数组上使用 reverse()

调用 `reverse()` 后,稀疏数组仍然是稀疏的。空位会被复制到它们各自的新索引处,并保持为空位。

js
console.log([1, , 3].reverse()); // [3, empty, 1]
console.log([1, , 3, 4].reverse()); // [4, 3, empty, 1]

在非数组对象上调用 reverse()

reverse() 方法会读取 `this` 的 `length` 属性。然后,它会遍历 `0` 到 `length / 2` 之间的每个整数键属性,并交换两端对应的索引,删除任何目标属性(如果源属性不存在)。

js
const arrayLike = {
  length: 3,
  unrelated: "foo",
  2: 4,
  3: 33, // ignored by reverse() since length is 3
};
console.log(Array.prototype.reverse.call(arrayLike));
// { 0: 4, 3: 33, length: 3, unrelated: 'foo' }
// The index 2 is deleted because there was no index 0 present originally
// The index 3 is unchanged since the length is 3

规范

规范
ECMAScript® 2026 语言规范
# sec-array.prototype.reverse

浏览器兼容性

另见