array.prototype.at() 是 es2022 引入的数组方法,支持正负索引安全访问元素,负数从末尾计数且越界返回 undefined,比方括号语法语义更明确、边界行为更一致,适用于只读单点取值场景。

Array.prototype.at() 是 ES2022 引入的原生方法,专为简化数组索引访问而设计,尤其擅长处理负数索引——无需手动计算 array.length + negativeIndex,一行代码即可安全取到末尾元素。
负索引访问:告别 length 计算
传统方式访问倒数第 n 个元素需写成 arr[arr.length - 1](倒数第一)、arr[arr.length - 2](倒数第二)等,易出错且冗长。使用 .at() 后,直接传入负数即可:
-
[1, 2, 3, 4].at(-1)→4(最后一个) -
[1, 2, 3, 4].at(-2)→3(倒数第二个) -
[1, 2, 3, 4].at(-10)→undefined(越界安全返回 undefined,不报错)
比方括号语法更安全的边界行为
方括号访问负索引(如 arr[-1])实际是读取对象属性,返回 undefined 但语义错误;而 .at() 明确将负数解释为“从末尾开始计数”,且对越界有统一、可预测的处理:
-
[].at(0)→undefined -
[].at(-1)→undefined -
[5].at(1)→undefined -
[5].at(-2)→undefined
这种一致性让条件逻辑更清晰,避免隐式类型转换或意外的 undefined 来源。
与其他取值方法对比:适用场景明确
.at() 不替代 .pop()、.slice() 或解构,而是填补“只读、单点、支持负索引”的空白:
- 要获取最后一个元素且不修改原数组?用
.at(-1),比.slice(-1)[0]更直观高效 - 需要倒数第三个且兼容空数组?
arr.at(-3) ?? 'default'比arr[arr.length - 3]更健壮 - 替代
arr[arr.length - 1]的所有场景,都可直接升级为arr.at(-1)
浏览器与运行时支持现状
现代环境已广泛支持:Chrome 104+、Firefox 105+、Safari 16.4+、Node.js 18.17+。若需兼容旧环境,可用简易 polyfill:
if (!Array.prototype.at) { Array.prototype.at = function(n) { const len = this.length; return n >= 0 ? this[n] : this[len + n]; }; }










