Array.prototype.toReversed() 是 ES2023 引入的不可变倒序方法,返回新数组且不修改原数组,适用于 React/Vue/原生 JS 渲染,可链式调用 toSorted() 等,兼容性需 polyfill 或降级为 [...items].reverse()。

Array.prototype.toReversed() 是 ES2023 引入的原生方法,专为「安全倒序」设计:它返回一个新数组,完全不修改原始数组,天然适配“不破坏原始序列”的视图渲染需求。
直接用于 JSX/模板中的倒序列表渲染
在 React、Vue 或纯 DOM 操作中,可直接在渲染逻辑里调用 toReversed(),无需额外拷贝或 reverse() 副作用:
- React 示例:
{items.toReversed().map((item, i) => <div key="{i}">{item}</div>)} - Vue 模板:
v-for="item in items.toReversed()" - 原生 JS 渲染:
items.toReversed().forEach(item => el.append(createItemEl(item)))
配合状态管理保持原始数据纯净
当原始数组是受控状态(如 useState 或 ref),倒序仅用于展示时,toReversed() 避免了手动深拷贝或 slice().reverse() 的冗余操作:
- ❌ 不推荐:
[...items].reverse()—— 多一步,语义弱 - ❌ 错误做法:
items.reverse()—— 破坏原始顺序,后续逻辑可能出错 - ✅ 推荐:
items.toReversed()—— 一行、明确、无副作用
与 toSorted() / toSpliced() 等协同构建不可变操作链
ES2023 新增的这批「toXxx()」方法都遵循不可变原则,可自然组合:
- 先过滤再倒序:
items.filter(x => x.active).toReversed() - 倒序后取前 3 条:
items.toReversed().slice(0, 3) - 避免嵌套调用混乱:
items.toReversed().map(format).filter(isValid)
兼容性注意与降级方案
目前 Chrome 114+、Firefox 117+、Safari 17.4+ 原生支持;若需兼容旧环境:
- 现代打包项目建议用 Babel +
@babel/preset-env自动 polyfill - 轻量降级写法:
Array.isArray(items) ? [...items].reverse() : [](语义稍弱但行为一致) - 不建议手动挂载原型方法,易引发冲突

















