array.prototype.at()是es2022引入的安全访问数组任意位置(含负索引)的方法,支持空数组、无需手动计算长度、可与可选链和空值合并操作符结合使用,提升代码简洁性与健壮性。

Array.prototype.at() 是 ES2022 引入的原生方法,专为安全、简洁地访问数组任意位置(包括负索引)而设计。相比 arr[arr.length - 1] 或 arr.slice(-1)[0],它天然支持负数索引,无需手动计算长度,代码更直观,也避免了空数组导致的 undefined 访问异常(虽然仍返回 undefined,但语义清晰、无报错)。
直接读取末尾元素(含空数组安全)
后端返回的数组长度不确定时,用 .at(-1) 可以一步到位获取最后一个元素,无论数组长度是 0、1 还是多个:
-
[]?.at(-1)→undefined(可选链确保不报错) -
[42]?.at(-1)→42 -
[1, 2, 3, 4]?.at(-1)→4
读取倒数第 N 个元素(替代繁琐下标计算)
比如需要取“最新一条日志”或“上一次操作结果”,而接口可能返回 0~3 条记录。传统写法需判断长度:
❌ 不推荐:const prev = arr.length >= 2 ? arr[arr.length - 2] : undefined;
const prev = arr?.at(-2); // 负索引自动处理边界,超界返回 undefined
与解构/默认值结合,提升可读性与健壮性
配合空值合并操作符(??),可优雅提供兜底逻辑:
const lastId = response.data?.items?.at(-1)?.id ?? 0;const latestStatus = (data?.logs || []).at(-1)?.status ?? 'idle';
无需提前 if (!arr || arr.length === 0) 判断,链式调用 + 可选链 + at() 已覆盖常见边界场景。
注意兼容性与降级方案
若需支持旧版浏览器(如 IE 或低于 Chrome 92 的版本),可添加轻量 polyfill:
if (!Array.prototype.at) { Array.prototype.at = function(n) { const len = this.length; return n >= 0 ? this[n] : this[len + n]; }; }
或者使用 Babel + @babel/preset-env 自动按目标环境注入补丁。现代项目中,只要编译配置合理,.at() 可放心使用。











