at() 方法比方括号索引更适配负数取值,因其原生支持负索引(如-1表示末尾),语义清晰、安全一致;而 str[-1] 恒为 undefined,需手动计算 length 且易出错。
字符串的 at() 方法是 ES2022 引入的原生方法,它能直接支持负数索引(如 -1 表示最后一个字符),无需手动计算 str[str.length + n],比传统方括号索引更安全、更语义清晰。
传统方括号访问(str[-1])始终返回 undefined,因为字符串不支持负索引——它把负数当成了无效属性名。而 at() 明确设计为支持负偏移:从末尾向前计数,at(-1) 等价于 str[str.length - 1],且对越界负索引(如 at(-100))也统一返回 undefined,行为一致、无副作用。
str.at(-1) ✅(简洁明确) vs str[str.length - 1] ❌(需重复写 length,易错)str.at(-2) ✅ vs str[str.length - 2] ❌"".at(-1) === undefined ✅,而 ""[-1] 也是 undefined,但语义模糊at() 在 Node.js 16.6+ 和现代浏览器(Chrome 92+, Firefox 90+, Safari 15.4+)中可用。若需兼容旧环境,可使用简单 polyfill:
if (!String.prototype.at) {<br> String.prototype.at = function(n) {<br> const idx = Math.floor(n);<br> return idx >= 0 ? this[idx] : this[this.length + idx];<br> };<br>}
注意:该方法只适用于字符串和数组(Array.prototype.at 同理),不改变原字符串,返回单个字符(或 undefined)。