String padding S4
中文标题:字符串填充
- 阶段: Stage 4
- 状态: 已完成
- ECMAScript 版本: ES2017
- 同步时间: 2026年8月26日
- English original · 官方仓库
该提案引入了 String.prototype.padStart 和 padEnd 方法,用于将字符串填充到目标长度,解决了 JavaScript 中缺乏原生字符串填充的问题。它将目标长度定义为结果字符串的最大长度,确保行为可预测。
以下 README 来自上游仓库,其中的阶段或状态标注可能滞后;当前信息以提案概览为准。
String.prototype.padStart / String.prototype.padEnd
ECMAScript 提案、规范、测试和参考实现,用于 String.prototype.padStart/padEnd。
这个初始提案由 @KevinGrandon 起草,并得到了 @rwaldron 和 @dherman 的输入。 更新的规范由 @ljharb 起草,并得到了 @rwaldron、@allenwb 和 @dherman 的输入。
指定的 TC39 审阅者:@littledan @michaelficarra
理由
没有一种合理的方式使用原生方法来填充字符串,今天使用 JavaScript 字符串比应有的更痛苦。没有这些函数,语言感觉不完整,并且是对本可以非常完善体验的一种小瑕疵。
由于常见用途,字符串填充函数存在于大多数网站和框架中。例如,FirefoxOS 中的几乎每个应用都实现了左填充函数,因为它们都需要某种通用的字符串填充操作。
当前大多数字符串填充实现很可能是低效的。将其引入平台将提高 Web 的性能,并提高开发者的生产力,因为他们不再需要实现这些常见函数。
规范
命名
为了与 trimStart/trimRight 和
根据 2015 年 11 月 TC39 会议的更新:名称将是 reduce/reduceRight 保持一致,尽管存在 startsWith/endsWith,我们最终确定为 padLeft 和 padRight。padStart/padEnd,trimLeft/trimRight 将改为 trimStart/trimEnd,而 trimLeft/trimRight 别名将被添加到 Annex B 以用于 Web 兼容性。
“最小长度”与“最大长度”的语义
在用规范语言更新此提案时,我们详细讨论了第一个参数应该决定填充字符串的最小长度还是最大长度。具体来说,“最小长度”语义表示 'foo'.padEnd(4, '12') 将输出 foo12,而“最大长度”语义将输出 foo1。由于 padStart/padEnd 的主要用例之一是格式化列中的等宽文本,并且“最小长度”语义可以通过 String#repeat 实现,我们决定“最大长度”是更有用的方法。
左填充(相对于填充字符串):与其他语言的一致性
根据 #6,我们发现唯一支持多字符填充字符串并提供“左”和“右”功能的语言是 Ruby 和 PHP。两种语言的“左填充”形式都取填充字符串的第一个部分,而不是最后一个。一个清楚的例子是:"abc".padStart(10, "0123456789") - 取填充字符串的最后部分得到 "3456789abc",而取第一部分得到 "0123456abc"。换句话说,string.padStart(mask.length, mask) 应该按预期工作。