?
原文 链接:迎接 star.
本日在看 ES7 新增的部份 Api 的时刻恰好看到 padStart 的这个要领,彷佛还挺有用的,而且也想在正式最先事情之前先找找写代码的觉得,因而随手(实在照样花了不少时候的)就完成了这个 polyfill。
相干的 API 用法在 MDN 上有申明。 链接 下面是详细完成
if(!String.prototype.padStart)
String.prototype.padStart =
// 为了轻易示意这里 fillString 用了ES6 的默许参数,不影响明白
function (maxLength, fillString=' ') {
if(Object.prototype.toString.call(fillString) !== "[object String]") throw new TypeError('fillString must be String')
let str = this
// 返回 String(str) 这里是为了使返回的值是字符串字面量,在掌握台中更相符直觉
if(str.length >= maxLength) return String(str)
let fillLength = maxLength - str.length,
times = Math.ceil(fillLength / fillString.length)
// 这个算法叫啥?
// SICP 的中文版第 30页 有用到同种算法盘算乘幂盘算
while(times >>= 1) {
fillString += fillString
if(times === 1){
fillString += fillString
}
}
return fillString.slice(0, fillLength) + str
}
// padStart 关于我来讲最经常使用的处所就在于时候或许数字花样补全了
'5'.padStart(2, '0') // '05'
'15'.padStart(2, '0') // '15'
ps:
写完以后倏忽发明这个彷佛就是之前 npm 的 left-pad
删库事宜;隐隐记得好多人都重写过这个库。anyway, 练手的目标算是达到了。