at() 是 JavaScript 中安全访问数组元素的现代方法,支持正负索引、越界返回 undefined 而不报错,语义更清晰;如 arr.at(-1) 取末项,比 arr[arr.length-1] 更简洁安全。

at() 是 JavaScript 中用于安全访问数组元素的现代方法,支持正索引(从头开始)和负索引(从末尾开始),不会因越界返回 undefined 而报错,语义更清晰、行为更可靠。
at() 的基本用法和正负索引规则
调用 arr.at(index) 时:
- 正数索引(如
0、1)等价于arr[index],从第 0 个元素开始计数 - 负数索引(如
-1、-2)表示从末尾倒数:-1 是最后一个,-2 是倒数第二个…… - 越界时统一返回
undefined,不抛错,也不触发隐式类型转换(对比arr[-1]原本是undefined,但写法不直观且易混淆)
例如:const arr = ['a', 'b', 'c'];<br>arr.at(0); // 'a'<br>arr.at(2); // 'c'<br>arr.at(-1); // 'c'<br>arr.at(-5); // undefined<br>arr.at(10); // undefined
对比传统写法:为什么 at() 更安全直观
过去常用以下方式模拟“取末尾元素”,但都有缺陷:
立即学习“Java免费学习笔记(深入)”;
-
arr[arr.length - 1]:需手动计算,冗长;若arr为空,结果为arr[-1] → undefined,但逻辑不直觉 -
arr.slice(-1)[0]:创建新数组,性能低,语义模糊(本意是“取值”,却做了“切片”) -
arr?.[arr.length - 1]:可选链缓解报错,但仍要算下标,负索引无原生支持
at() 一行解决:简洁、无副作用、意图明确——“我就想按位置取一个值”。
实际开发中的典型场景
这些地方用 at() 更自然:
- 获取最后一个元素:
arr.at(-1)(比arr[arr.length - 1]少写一半) - 安全读取可能不存在的索引(如解析用户输入的索引):
const item = arr.at(userInputIndex) ?? 'default' - 链式操作中避免中间值为
undefined导致报错:users.at(i)?.name比users[i]?.name更兼容负索引 - 配合解构或默认值使用:
const [first, , last] = [arr.at(0), undefined, arr.at(-1)];
兼容性与使用建议
at() 已被 Chrome 92+、Firefox 90+、Safari 15.4+ 和 Node.js 16.6+ 原生支持。如需兼容旧环境:
- 项目用 TypeScript 或现代构建工具(如 Vite、Webpack)时,可通过 polyfill(如
core-js)补全:import 'core-js/stable/array/at'; - 纯浏览器环境可简单降级:
Array.prototype.at ??= function(n) { return this[n (注意:仅覆盖未定义时,不处理 Symbol 或 getter 等边界) - 不推荐在核心逻辑中混用
arr[i]和arr.at(i),保持风格统一有助于团队理解


















