JS文字列補完方法padStart()とpadEnd()

2283 ワード

背景:
var t = new Date().getMonth() + 1;
// t ===> 7,  0,          ?
// 2018-07-23

上記の問題を解決する一つの考え方:
//  0  
function(num) {
    return +num < 10 ? '0' + num : num;
}
padStart(len, str)
  • 所定の長さに基づいて自動的に文字列の前に補足したい文字列を補充する(修正後の文字列のみを返し、元の文字列は変更しない)
  • len所与の長さ、変換後
  • str補足したい文字列

  • 栗:
    var a = '7';
    a.padStart(2, '0');
    // a ===> 07
    var b = 'hi';
    b.padStart(10, 'hello');
    // b ===> hellohelhi,     
    var c = 'hi';
    c.padStart(10, '');
    // c ===> hi
    var d = 'a';
    d.padStart(5, false);
    // falsa
    d.padStart(5, []);
    // a
    d.padStart(5, {});
    // [obja
    d.padStart(5, null);
    // nulla
    d.padStart(5, function(){});
    // funca

    実現の構想:
    var a = '22'
    a.padStart(len, str)

    疑似コード:
    var res = ''
    if (str.toString) {
        res = str.toString();
    }
    else {
        res = Object.prototype.toString.call(str);
    }
    return res;
    res.repeat(len/2+1).slice(0, len - a.length) + a
    padEnd()はpadStartパラメータと同様に、追加したい文字列を先頭に追加するだけです.
    var a = 'aaa'.padEnd(15, {});
    // aaa[object Obje

    互換性:
    現在、フロントエンドで使用するには互換性が必要です.stringを参照してください.polyfill.js
    if (!String.prototype.padStart) {
        String.prototype.padStart = function padStart(targetLength,padString) {
            targetLength = targetLength>>0; //truncate if number or convert non-number to 0;
            padString = String((typeof padString !== 'undefined' ? padString : ' '));
            if (this.length > targetLength) {
                return String(this);
            }
            else {
                targetLength = targetLength-this.length;
                if (targetLength > padString.length) {
                    padString += padString.repeat(targetLength/padString.length); //append to original to ensure we are longer than needed
                }
                return padString.slice(0,targetLength) + String(this);
            }
        };
    }

    node.jsはバージョン8にサポートされています
    転載先:https://www.cnblogs.com/hongrunhui/p/9370954.html