string.prototype.at() 提供安全直观的负索引字符访问方式,如 .at(-1) 获取末尾字符,空字符串返回 undefined,适用于流式文本边界判定与解析。

String.prototype.at() 提供了一种更直观、安全的方式访问字符串中任意位置的字符,尤其适合处理流式原始文本时快速获取倒数元素(如末尾换行符、分隔符或校验字符),避免手动计算 length - 1 等易错偏移。
直接用负索引获取倒数字符,无需手动算偏移
传统方式需写 str[str.length - 1] 获取最后一个字符,但当字符串为空时会返回 undefined(而非报错),且逻辑不够清晰。而 .at(-1) 明确表达“取倒数第一个”,空字符串时也安全返回 undefined,语义更准确:
-
"hello".at(-1)→"o" -
"".at(-1)→undefined -
"\n".at(-1)→"\n"(对流式文本中检测末尾换行很实用)
配合流式文本的边界判定更简洁可靠
在解析逐块到达的原始文本(如 ReadableStream 或 line-by-line 处理)时,常需判断当前 chunk 是否以特定字符结尾(如 \n、\r\n)。使用 .at(-1) 可省去长度检查和索引计算:
- 替代
chunk[chunk.length - 1] === "\n"→ 直接写chunk.at(-1) === "\n" - 检测倒数第二个字符:
chunk.at(-2)(例如判断"\r\n"是否完整出现在末尾) - 即使 chunk 长度不足(如只有 1 字符),
.at(-2)安全返回undefined,不会报错或越界读取
与解构或条件逻辑自然结合,提升可读性
在判断流式片段是否需要缓存或拼接时,可直接嵌入条件表达式:
if (chunk.at(-1) !== "\n") { pending += chunk; }const lastChar = chunk.at(-1); if (lastChar && !/\s/.test(lastChar)) { /* 非空白结尾,可能截断 */ }- 比
chunk.length && chunk[chunk.length - 1]更少样板,更贴近自然语言意图
注意:仅适用于现代环境,需确认运行时支持
.at() 在 Node.js 16.6+ 和主流浏览器(Chrome 90+, Firefox 95+, Safari 15.4+)中可用。若需兼容旧环境,可用简单 polyfill:
if (!String.prototype.at) { String.prototype.at = function(n) { n = Math.trunc(n) || 0; return n- 该实现保持负索引语义,且不改变原生行为逻辑










