string.prototype.at() 是 es2022 引入的安全取字符方法,原生支持负数索引(如-1取末字符),越界统一返回 undefined,而 str[-1] 恒为 undefined;旧环境可用 length 判断回退。

String.prototype.at() 是 ES2022 引入的方法,用于安全地按索引获取字符串中的字符,**原生支持负数索引**,这点比方括号语法 [] 更直观、更健壮。
负数索引的含义
负数索引从字符串末尾开始计数:
-
-1表示最后一个字符 -
-2表示倒数第二个字符 - 以此类推
与方括号语法的区别
直接用 str[-1] 总是返回 undefined(因为字符串对象没有名为 "-1" 的自有属性),而 str.at(-1) 会正确解析为“末尾字符”:
const str = "hello"; console.log(str[-1]); // undefined console.log(str.at(-1)); // "o"
越界行为更合理
at() 在索引超出范围时统一返回 undefined,无论正负:
-
"a".at(1)→undefined -
"a".at(-2)→undefined -
"a".at(0)→"a" -
"a".at(-1)→"a"
对比 str[1] 虽也返回 undefined,但 str[-1] 的语义缺失使其无法表达“取末尾”的意图。
兼容性与替代方案
如需支持旧环境(如 IE 或早期 Node.js),可用以下安全回退:
function at(str, index) {
const len = str.length;
if (index = 0 && index
或直接用可读性更强的写法:str.charAt(index (注意 <code>charAt() 越界时返回空字符串 "",不是 undefined,需额外判断)。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











