String.prototype.at ?
提案概览
- 阶段: 未分阶段
- 状态: 不活跃
- ECMAScript 版本: —
- 同步时间: 2026年8月26日
- English original · 官方仓库
提案速览
该提案定义了 String.prototype.at 的 polyfill,用于提取字符串中指定位置的码点,越界时返回空字符串。它包含逐步算法,处理代理对。该提案未被纳入规范,后来另一个语义不同的提案被采用。
Note
以下 README 来自上游仓库,其中的阶段或状态标注可能滞后;当前信息以提案概览为准。
注意: 此提案未被上游纳入 ECMAScript 规范!本仓库仅为历史目的保留。多年后,在 2020 年 11 月,一个不同的提案 添加了具有不同语义的 String.prototype.at。
ES6/ES7 String.prototype.at polyfill 
一个健壮且优化的、兼容 ES3 的 polyfill,用于 ECMAScript 6/7 的 String.prototype.at 提案。
规范错误票证:https://bugs.ecmascript.org/show_bug.cgi?id=2073
String.prototype.at(pos) 的规范提案
注意: 返回一个单元素字符串,其中包含将 this 对象转换为字符串后得到的字符串 value 中位置 pos 处的码点。如果该位置没有元素,则结果为空字符串。结果是字符串值,而非字符串对象。
当调用 at 方法并传入一个参数 pos 时,执行以下步骤:
- 令
O为RequireObjectCoercible(this value)。 - 令
S为ToString(O)。 ReturnIfAbrupt(S)。- 令
position为ToInteger(pos)。 ReturnIfAbrupt(position)。- 令
size为S中的元素个数。 - 如果
position < 0或position ≥ size,返回空字符串。 - 令
first为字符串S中索引position处的码元。 - 令
cuFirst为字符串first中索引0处的码元值。 - 如果
cuFirst < 0xD800或cuFirst > 0xDBFF或position + 1 = size,则返回first。 - 令
cuSecond为字符串S中索引position + 1处的码元值。 - 如果
cuSecond < 0xDC00或cuSecond > 0xDFFF,则返回first。 - 令
second为字符串S中索引position + 1处的码元。 - 令
cp为(first – 0xD800) × 0x400 + (second – 0xDC00) + 0x10000。 - 返回
cp的 UTF-16 编码(第 6 条)的元素。
注意: at 函数有意设计为通用的;它不要求其 this 值必须是字符串对象。因此,它可以被转移到其他类型的对象上作为方法使用。
安装
在浏览器中:
通过 npm:
然后,在 Node.js 中:
备注
String.fromCodePoint 和 String.prototype.codePointAt 的 polyfill 和测试套件也可用。
作者
许可证
此 polyfill 根据 MIT 许可证提供。