array.prototype.at() 是 es2022 引入的简洁安全方法,支持正负索引(如 at(-1) 取末项),可链式调用、防空数组报错、不创建新数组,语义清晰且性能优于 slice(-1)[0] 或 reduce 等冗余写法。

Array.prototype.at() 是 ES2022 引入的简洁方法,可直接通过索引(支持负数)获取数组元素,其中 at(-1) 等价于 array[array.length - 1],但更安全、更可读。当它与链式调用结合时,能显著减少嵌套函数返回数组后取末尾元素的冗余写法。
避免临时变量 + length 计算
传统方式常需先存数组、再算长度、再取值:
const result = someNestedFunction(); // 返回 [a, b, c] const last = result[result.length - 1];
使用 at() 后可直接链式调用,无需中间变量:
const last = someNestedFunction().at(-1);
- 省去声明
result变量 - 跳过
.length - 1手动计算,语义明确 - 对空数组返回
undefined(不会报错),比[array.length - 1]更健壮
在 Promise 链或可选链中自然衔接
当嵌套函数是异步或可能为 null/undefined 时,at() 能无缝融入现代语法:
// 异步场景 someAsyncFunction().then(arr => arr.at(-1)); <p>// 可选链 + at() obj?.getItems()?.at(-1);</p><p>// 组合 map + at fetchData().map(transformToArr).at(-1);</p>
-
at()是普通数组方法,不改变链式结构,可接在任何返回数组的操作之后 - 配合可选链(
?.)天然防错,无需额外判断数组是否存在或是否为空 - 相比
slice(-1)[0]或reverse()[0],它不创建新数组、不修改原数组,性能更好
替代 reduce / for 循环取末项的过度设计
有些场景会误用迭代逻辑来“找最后一个”:
// ❌ 不必要地复杂 arr.reduce((_, curr, i, src) => i === src.length - 1 ? curr : _); <p>// ✅ 直接且意图清晰 arr.at(-1);</p>
-
at(-1)是声明式写法,表达「我要最后一个」的意图零歧义 - 在链式中(如
filter(...).sort(...).at(-1))保持线性流,易读易维护 - 所有主流浏览器及 Node.js 16.6+ 均已支持,无需 polyfill(兼容性要求不高时)










