array.prototype.toreversed()是es2023新增的非破坏性反转方法,返回原数组的浅拷贝并反转顺序,语义更清晰、性能更优,兼容现代浏览器及node.js 20.2+。

Array.prototype.toReversed() 是 ES2023 引入的原生方法,专为「非破坏性反转」设计——它不修改原数组,而是返回一个**全新反转顺序的浅拷贝数组**。相比传统的 slice().reverse(),它语义更清晰、意图更明确,且性能略优(V8 等引擎已做优化)。
基本用法:一行完成克隆 + 反转
直接调用即可,无需额外操作:
const original = [1, 2, 3, 4]; const reversed = original.toReversed(); // [4, 3, 2, 1] console.log(original); // [1, 2, 3, 4] ← 原数组未变 console.log(reversed); // [4, 3, 2, 1] ← 全新数组
与传统方式对比:为什么推荐 toReversed()
-
语义明确:
toReversed()表达“我要一个反转副本”,而slice().reverse()是“先切片再反转”,中间步骤冗余 -
不可变保障更强:不会意外调用
reverse()(该方法会就地修改原数组),降低 bug 风险 - 兼容性注意:需确保运行环境支持(Chrome 112+、Firefox 117+、Safari 17.4+;Node.js 20.2+)。旧环境可用 polyfill 或回退方案
实际使用建议
- 处理列表渲染(如消息、日志)时,需要倒序展示但保留原始数据顺序,直接用
data.toReversed()传给 UI - 配合其他链式方法使用自然:
items.filter(x => x.active).toReversed().map(renderItem) - 注意是「浅拷贝」:若数组含对象,对象引用不变,仅元素顺序反转。需深克隆请另行处理
- 不支持类数组对象(如 arguments、NodeList),需先转为真数组:
Array.from(nodelist).toReversed()
兼容性兜底写法(按需选用)
若需支持老旧环境,可封装一个安全函数:
function safeToReversed(arr) {
return Array.isArray(arr) && typeof arr.toReversed === 'function'
? arr.toReversed()
: [...arr].reverse();
}










