array.prototype.at() 是 es2022 引入的原生方法,支持正负索引(如 arr.at(-1) 取末项),自动越界保护返回 undefined,零拷贝、o(1) 时间复杂度,语义清晰且比 slice(-1)[0] 更高效;兼容性良好,旧环境可用 polyfill 降级。

Array.prototype.at() 是 ES2022 引入的原生方法,专为简化数组索引访问而设计,尤其擅长处理负索引——无需手动计算 array.length + negativeIndex,一行代码即可安全、直观地获取倒数第 N 个元素。
负索引访问:告别 length 计算
传统方式访问最后一个元素需写 arr[arr.length - 1],倒数第二个是 arr[arr.length - 2],既冗长又易出错(如越界未防护)。at() 直接支持负数参数:arr.at(-1) 恒指末尾,arr.at(-2) 指倒数第二个,语义清晰且自动越界保护(返回 undefined 而非 undefined 或报错)。
比 slice(-1)[0] 更轻量、更语义化
有人用 arr.slice(-1)[0] 模拟负索引,但该方式会新建子数组,存在额外内存开销与性能损耗。at() 是零拷贝操作,仅做索引映射,时间复杂度 O(1),且意图明确——“我要取这个位置的值”,而非“截一段再取头”。
安全边界处理:undefined 而非异常
at() 对越界索引(如 arr.at(-100) 在长度为 5 的数组上)统一返回 undefined,不抛错。这与 arr[-1](非法属性访问,始终返回 undefined)不同,也区别于 arr.at(100)(正向越界同样返回 undefined),行为一致、可预测,适合条件判断:
if (arr.at(-1) !== undefined) { /* 确保有末项 */ }const last = arr.at(-1) ?? 'default'; // 提供兜底值
兼容性注意与降级建议
目前主流浏览器及 Node.js 16.6+ 均已支持。若需兼容旧环境,可用简易 polyfill:
if (!Array.prototype.at) {<br> Array.prototype.at = function(n) {<br> const len = this.length;<br> return n >= 0 ? this[n] : this[len + n];<br> };<br>}该实现严格复现规范行为:正索引直取,负索引自动偏移,越界时自然返回 undefined(因 this[len + n] 中 len + n 为负或超长,JS 数组读取即得 undefined)。










