at() 是 ES2022 引入的负索引访问方法,统一支持数组和字符串,-1 表示末尾元素,越界返回 undefined,不修改原数据,Chrome92+/Firefox90+/Safari15.4+/Node.js16.6+ 原生支持。

at() 是 JavaScript 在 ES2022 中正式引入的方法,专为简化**负索引访问**而设计,统一支持数组和字符串,解决了传统方括号语法无法直接使用负数索引的痛点。
统一负索引语义,告别手动计算
过去访问倒数第 n 个元素需写成 arr[arr.length - n] 或 str[str.length - n],易出错且冗长。现在只需 arr.at(-1) 或 str.at(-2),语义清晰:-1 表示最后一个,-2 表示倒数第二个……无需关心长度。
- 对数组:
[10, 20, 30].at(-1)→30 - 对字符串:
"hello".at(-1)→"o" - 越界时返回
undefined(而非undefined或报错),行为一致且安全
兼容空值与边界情况,更健壮
相比 arr[-1](始终返回 undefined,因为负数不是合法属性名),at() 明确将负索引解释为“从末尾计数”,并正确处理边界:
-
[].at(-1)→undefined(空数组) -
"a".at(-5)→undefined(负索引超出范围) -
[42].at(0)和[42].at(-0)都返回42(-0 被规范转为 0)
不修改原数据,纯函数式访问
at() 是只读方法,不改变数组或字符串本身,符合函数式编程习惯。它不依赖 this 的可变状态,也不触发 getter/setter,行为可预测。
立即学习“Java免费学习笔记(深入)”;
- 不会像某些 polyfill 那样意外调用自定义
length或toString - 在稀疏数组中也能准确按位置取值,不受 holes 影响
浏览器与环境支持已成熟
Chrome 92+、Firefox 90+、Safari 15.4+ 及 Node.js 16.6+ 均原生支持。如需兼容旧环境,可用简单 polyfill:
if (!Array.prototype.at) {
Array.prototype.at = function(n) {
const len = this.length;
return n >= 0 ? this[n] : this[len + n];
};
}











