padStart设置targetLength小于原字符串长度时未截断的原因是什么?
padStart方法输出不符合预期原因解析
首先看你给出的代码:
const id = 46919; const string = id.toString(36); // output: "107b" console.log(string.padStart(3, '0'));
该现象是String.prototype.padStart()的标准设计逻辑导致的,核心规则如下:
padStart接收的第一个参数targetLength是补全后期望的最小字符串长度,不是强制固定的输出长度- 只有当原字符串的长度小于
targetLength时,才会在字符串开头填充指定字符,直到总长度等于targetLength后返回 - 如果原字符串本身的长度已经大于或等于
targetLength,方法会直接返回完整的原字符串,不会做任何截断操作
你的代码中,id.toString(36)得到的字符串"107b"本身长度为4,已经大于你传入的targetLength=3,因此不会触发补全逻辑,也不会截断字符,直接返回原字符串,最终输出107b。
如果需要实现「长度不足3位开头补0,超过3位则截断保留前3位」的效果,可以组合使用padStart和slice方法:
console.log(string.padStart(3, '0').slice(0, 3)); // 输出预期的 "107"
内容的提问来源于stack exchange,提问作者kwatanab
相关产品推荐
相关产品推荐

