padStart 的 polyfill

?

原文 链接:迎接 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, 练手的目标算是达到了。

    原文作者:zwhu
    原文地址: https://segmentfault.com/a/1190000008259053
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞