String.prototype.at() 是 ES2022 引入的安全访问字符串字符的方法,支持负索引(如 -1 表示末尾),越界返回 undefined,语义清晰且无需手动计算长度;与 slice() 不同,它只返回单个字符,空字符串时返回 undefined 而非空串。
String.prototype.at() 是 ES2022 引入的原生方法,专为安全、直观地访问字符串中任意位置的字符而设计,尤其适合用负索引从末尾取字符。
传统 str[-1] 返回 undefined(因为字符串不支持负索引),而 at() 明确支持:它把负数解释为“从末尾开始计数”,-1 就是最后一个字符,-2 是倒数第二个,以此类推。
str[str.length - 1],代码更简洁undefined 而引发静默错误——越界时直接返回 undefined,语义清晰"".at(-1) 安全返回 undefined,无需额外判空假设 const str = "hello":
str.at(-1) → "o"(末尾)str.at(-2) → "l"(倒数第二)str.at(-5) → "h"(开头,等价于 at(0))str.at(-6) → undefined(越界,长度为 5,-6 已超出范围)at() 返回单个字符(string 类型),slice(-1) 返回子串(也可能是空字符串 "")。两者行为不同:
"".at(-1) → undefined;"".slice(-1) → ""
at() 更语义化slice(-2),at() 不适用现代浏览器(Chrome 92+、Firefox 95+、Safari 15.4+)及 Node.js 16.6+ 原生支持。如需兼容旧环境:
if (!String.prototype.at) { String.prototype.at = function(n) { n = Math.floor(n); return n >= 0 ? this[n] : this[this.length + n]; }; }
@babel/preset-env 自动注入